iPhone scrollView динамически добавляет элементы с идентификатором - PullRequest
0 голосов
/ 04 августа 2010

Я хочу заполнить scrollView несколькими различными элементами пользовательского интерфейса. Поэтому я подумал, что напишу метод, который запоминает текущую позицию в 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 = ..., я получаю запрос на членство в чем-то, не являющемся структурой или объединением. Когда я пытаюсь сделать [элемент frame] = ... Lvalue требуется в качестве левого операнда присваивания.

Теперь, во-первых, я не уверен, каков наилучший способ динамического добавления объектов в представление прокрутки. Может быть, у кого-то есть подход лучше или проще.

Тогда, с другой стороны, я не понимаю, почему выше не работает ?! Должен ли я привести свой элемент к реальному классу? Я думал, что не должен был бы делать это ... Кроме того, тогда мой метод больше не имел бы такого смысла. Или, по крайней мере, потребуется еще несколько шагов ...

Ответы [ 2 ]

0 голосов
/ 04 августа 2010

Разница в том, что "id" не имеет никакого отношения к фрейму.Это может быть что угодно .Вместо этого вы хотите сделать (UIView *)element в объявлении метода или, альтернативно, в вызове element.frame, вы должны сделать ((UIView *)element).frame.

(И да, все, что вы выводите на экран, наследуетсяот UIView - UIButton, UIImageView и т. д.)

0 голосов
/ 04 августа 2010

Это должно работать, я думаю:

 [element setFrame:...];

Однако, если вы работаете с различными элементами пользовательского интерфейса в вашем методе, возможно, вы можете сделать ваши элементы параметром UIView * вместо id? Таким образом, ваш код будет работать для всех подклассов UIView (это то, что вам действительно нужно, я полагаю)

...