【问题标题】:iPhone scrollView add elements dynamically with idiPhone scrollView 使用 id 动态添加元素
【发布时间】:2011-03-25 07:38:05
【问题描述】:

我想用很多不同的 UI 元素填充一个滚动视图。 因此,我想我会写一个方法来记住 scrollView 中的当前位置,并将元素添加到当前位置的 scrollView 中。

类似:

- (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
}

不幸的是,当我尝试访问 element.frame = ... 时,我收到了对不是结构或联合的成员的请求。当我尝试做 [element frame] = ... Lvalue required 作为赋值的左操作数时。

现在,首先我不确定将对象动态添加到滚动视图的最佳方法是什么。也许任何人都有更好或更简单的方法。

另一方面,我不明白为什么上面的方法不起作用?!我是否必须将我的元素转换为实际的类?我以为我不必这样做......那么我的方法就不再那么有意义了。或者至少需要更多的步骤......

【问题讨论】:

    标签: iphone dynamic uiscrollview elements


    【解决方案1】:

    我认为这应该可行:

     [element setFrame:...];
    

    但是,如果您在方法中使用不同的 UI 元素,您可以让您的元素参数 UIView* 而不是 id?这样,您的代码将适用于所有 UIView 子类(我想这是您真正需要的)

    【讨论】:

    • 是的,我已经考虑过了。但还是。不知何故,它应该与 id 一起使用......不过我会尝试 setFrame 。谢谢
    • 这确实有效。但我真的不明白有什么区别?编译器问题,或者为什么会这样?
    • 是的,这是编译器问题,只有 id 类型的编译器无法确定帧是什么。
    【解决方案2】:

    不同之处在于“id”没有任何对帧的引用。它可以是任何东西。相反,您想在方法声明中执行 (UIView *)element,或者在对 element.frame 的调用中执行 ((UIView *)element).frame

    (是的,您在屏幕上显示的所有内容都继承自 UIView -- UIButtonUIImageView 等)

    【讨论】:

    • 是的,我知道。我只是想知道为什么 id 不起作用。即使它没有参考我认为它应该在编译时检查...
    • “编译时间”不知道你最终会在一个方法的 id 声明参数中抛出什么样的东西——你或你的同事等等。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多