iPhone scrollView add elements dynamically with id

2019-08-19 13:14发布

问题:

I want to populate a scrollView with quite a few different UI elements. Therefore I thought I would write a method that remembers the current Position in the scrollView and just adds the element to the scrollView at the current Position.

Something like:

- (void)addUIElement:(id)element withWidth:(CGFloat)width andHeight:(CGFloat)height andYGap:(CGFloat)YGap {

    element.frame = CGRectMake(currentScrollPos.x, (currentScrollPos.y + YGap), width, height);
    [scrolly addSubview:element];

    //And then set the current scroll position here
}

Unfortunately when I try to do access element.frame = ..., I get request for member in something not a structure or union. When I try to do [element frame] = ... Lvalue required as left operand of assignment.

Now, first of all I am not sure what's the best way to dynamically add objects to a scrollview. Maybe anyone has a better or easier approach.

Then on the other hand, I don't get why the above does not work?! Would I have to cast my element to the actual class? I thought I would not have to do so... Also then my method would not make that much sense anymore. Or at least would require some more steps...

回答1:

This should work I think:

 [element setFrame:...];

However if you work with different UI elements in your method may be you can make your elements parameter UIView* instead of id? This way your code will work for all UIView subclasses (which is what you actually need I suppose)



回答2:

The difference is that "id" doesn't have any kind of reference to a frame. It could be anything. You want to instead do (UIView *)element in the method declaration, or alternatively in the call to element.frame, you would do ((UIView *)element).frame.

(And yeah, all things that you put on the screen are inheriting from UIView -- UIButton, UIImageView, etc.)