Lvalue требуется в качестве левого операнда присваивания - PullRequest
1 голос
/ 03 апреля 2011

Я хочу назначить suitSize для scrollButton, что я делаю не так?

UIView *scrollButton = [suitScrollView viewWithTag:1];
CGSize suitSize =CGSizeMake(10.0f,10.0f);
(UIButton *)scrollButton.frame.size=suitSize;

Ответы [ 3 ]

5 голосов
/ 03 апреля 2011

frame это свойство, а не поле структуры.Вы не можете назначить подполе этого.Думайте об этом как о вызове функции;синтаксис точки для свойств удобен.

Это:

scrollButton.frame.size = suitSize;

Эквивалентно:

[scrollButton frame].size = suitSize;

Что не работает;бессмысленно присваивать полю результат функции.

Вместо этого сделайте следующее:

CGFrame theFrame = [scrollButton frame];
theFrame.size = suitSize;
[scrollButton setFrame: theFrame];

Или, если вы предпочитаете:

CGFrame theFrame = scrollButton.frame;
theFrame.size = suitSize;
scrollButton.frame = theFrame;

Обратите внимание, что приведение scrollButton к UIButton не обязательно;У UIViews тоже есть фреймы.

1 голос
/ 03 апреля 2011

Не смешивайте методы доступа к свойствам и доступ к структурам в левой части назначения.

lvalue - это выражение, которое может появляться в левой части назначения.Когда вы смешиваете конструкции и свойства, полученное выражение не является lvalue, поэтому вы не можете использовать его в левой части присваивания.

(UIButton *)scrollButton.frame.size=suitSize;

Часть scrollButton.frame является доступом к свойству.Часть .size обращается к полю структуры frame.Приведенный выше пример Стивена Фишера - правильный способ разбить код, чтобы избежать проблемы.

0 голосов
/ 03 апреля 2011

При работе со свойствами, которые являются структурами, вы не можете напрямую устанавливать подструктуры таким образом ...

(UIButton *)scrollButton.frame.size=suitSize;

Свойство frame UIButton является структурой CGRect.Компилятор видит ваш доступ .size и пытается преобразовать его в установщик, который не существует.Вместо того, чтобы смешивать доступ к элементам структуры со средствами доступа к свойствам, вам нужно иметь дело со структурным типом CGRect в целом ...

CGRect frame = (UIButton *)scrollButton.frame;
frame.size = CGSizeMake(100, 100);
(UIButton *)scrollButton.frame = frame;
...