Обновление UIImageView при нажатии кнопки

Я создаю приложение в XCode 4.2, используя функцию раскадровки. У меня подключено 4 вида на базе контроллера навигации. В одном из представлений у меня есть текстовое поле и кнопка. Я реализовал скрытие клавиатуры при возврате, добавив текстовое поле в качестве deligate. Как только я закончу вводить текстовое поле, я нажму кнопку, и он должен обновить UIImageView.

Я понимаю, что мне нужно установить какую-то связь между UIImageView в Interface Builder и IBoutlet UIImageView, который я объявил в файле интерфейса. Но как мне это сделать в ситуации раскадровки?

В abcViewController.h у меня есть

@interface abcViewController:UIViewController {   
   IBOutlet UITextField *code;    
   IBOutlet UIImageView *qrImage;  
}  
@property (noatomic, retain) UITextField *code;  
@property (noatomic, retain) UIImageView *qrImage  
-(IBAction)textFieldReturn:(id)sender;  
-(IBAction)goButton:(id)sender;

В abcViewController.m у меня есть

 @synthesize code; 
 @synthasize qrImage; 
-(IBAction)textFieldReturn:(id)sender{ 
   [sender resignFirstResponder]; 
} 
-(IBAction)goPressed:(id)sender{ 
   [qrImage setImage:[UIImage imageNamed:@"qr.png"]]; 
}

В Интерфейсном Разработчике MainStoryboard.storyboard я установил связь в First Responder представления для textFieldReturn текстового поля и goPress кнопки с соответствующими событиями, и я связал текстовое поле как deligate этого представления. Теперь мне нужно подключить UIImageViewer к `First Responder '? Если да, то как?


person Deepak    schedule 04.05.2012    source источник


Ответы (2)


Я думаю, что вы можете использовать несколько терминов неправильно, но есть два разных типа соединений, которые вы можете установить между представлением в Interface Builder и кодом. Когда вы говорите, что «установили связь» между первым ответом и кнопкой и текстовым полем, это звучит так, как будто вы связали их Действия. При этом создается путь от представления (кнопка, текстовое поле и т. Д.), до объекта, к которому вы его подключили (в данном случае первый ответил, который по сути является abcViewController). Думайте об этом как о пути с односторонним движением; все, что он делает, это сообщает этим элементам управления (кнопке и текстовому полю), куда они должны отправить сообщение, когда придет время, потому что событие произошло. Таким образом, когда кнопка нажата, она имеет встроенное поведение отправки сообщения куда-нибудь, если оно подключено. Вы подключили его к действию goPressed: в abcViewController, поэтому оно и делает.

Другая сторона медали - убедиться, что контроллер представления может отправлять сообщения обратно элементам управления. Вот для чего нужны розетки. Не похоже, что вы настроили какие-либо выходы, поэтому abcViewController не имеет возможности отправить сообщение в представление изображения, которое оно должно отображаться, или изменить его изображение, или что-то еще.

Первое, что вам следует сделать, это также определить свои свойства как IBOutlets, например:

@property (noatomic, retain) IBOutlet UITextField *code;

Затем, когда вы вернетесь в Interface Builder, если вы перейдете на вкладку подключений инспектора, при выборе первого респондента вы увидите, что он перечисляет все свои выходы. Вам нужно будет подключить (перетащить от точки) выход на первом респонденте (abcViewController) к соответствующему представлению. Это создает путь от контроллера представления к представлению (противоположность тому, что вы сделали с действием).

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

person farski    schedule 04.05.2012
comment
объединение вашего решения с другим сработало для меня !! Спасибо!! - person Deepak; 04.05.2012

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

введите описание изображения здесь

Затем связывает объекты, которые вы объявили в коде, с объектами в вашей раскадровке, путем перетаскивания, как это было с xibs.

введите описание изображения здесь

person Mick MacCallum    schedule 04.05.2012
comment
мне нужно сделать первый шаг для всех созданных мной представлений? - person Deepak; 04.05.2012
comment
Я так считаю. Вот как вы можете установить разные классы для каждого контроллера представления, который вы добавляете в свою раскадровку. - person Mick MacCallum; 04.05.2012
comment
но у меня только один класс viewcontroller, так что здесь есть что сказать - person Deepak; 04.05.2012
comment
Вы просто добавляете этот класс к каждому контроллеру представления, для которого хотите его использовать. - person Mick MacCallum; 04.05.2012
comment
ну, спасибо .. но при этом не появляются розетки, потому что я пропустил шаг, который написан в другом ответе .. я попробую это и позволю вам знать !! - person Deepak; 04.05.2012
comment
спасибо, что вы объединили свое решение, а другое сработало для меня !! - person Deepak; 04.05.2012