Доступ к UIView с помощью метода класса? - PullRequest
0 голосов
/ 01 июля 2011

У меня есть 2 вида контроллеров AViewController и BViewController в качестве примера. Я хочу добавить элемент пользовательского интерфейса во второй BViewController из первого AViewController. Я думал, что смогу сделать это через метод класса, но UIView недоступен в методе класса BViewController при вызове из AViewController.

Реализация BViewController + (Недействительными) addThatButton { UIButton * btn = ...... [self.view addSubview: btn]; // <== ОШИБКА //[BViewController.view addSubview: btn]; // <== ТАКЖЕ ОШИБКА } </p>

Реализация AViewController [BViewController addThatButton];

Сообщение об ошибке, которое я получаю, это «запрос на просмотр элемента в чем-то, не являющемся структурой или объединением». Как правильно реализовать то, что мне нужно, или, другими словами, как получить доступ к представлению BViewController из класса A?

Спасибо

Ответы [ 3 ]

1 голос
/ 01 июля 2011

Необходимо создать функцию в BViewController

В BViewController.h

UIButton *btnB;

-(void)passButtonFromA:(UIButton *)btn;

В BViewController.m

-(void)passButtonFromA:(UIButton *)btn{
     btnB = btn;
}

-(void)viewWillAppear:(BOOL)animated{

    [self.view addSubView:btnB];
}

В AViewController.m

 BViewController *bViewController =[[BViewController alloc]initWithNibName:.. ...]; //allocated bViewController using your nib file
 [bViewController passButtonFromA:btnA];
 [self.navigationViewController pushViewController:bViewController animated:YES];
0 голосов
/ 01 июля 2011

Я думал, что смогу сделать это через метод класса, но UIView недоступен в методе класса BViewController при вызове из AViewController.

Это потому, что UIViewдля доступа.Метод класса выполняется независимо от любого экземпляра.Если вы хотите, чтобы конкретный объект обновлялся, вам нужно вызвать один из его методов экземпляра.

0 голосов
/ 01 июля 2011

Простой ответ: метод «+» - это статический метод, а «self» относится не к экземпляру, а к классу.Таким образом, self.view не имеет смысла.

Ваша базовая схема будет работать (с несколькими оговорками), если вы перейдете на метод "-" и каким-то образом получите адрес вашего экземпляра BViewController в AViewController и использовали этот адрес ввызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...