Актуализиране на UIImageView при натискане на бутон

Създавам приложение в XCode 4.2, използвайки функцията за сценарий. Имам 4 изгледа, свързани на базата на навигационен контролер. В един от изгледите имам текстово поле и бутон. Приложих скриването на клавиатурата при връщане, като добавих текстовото поле като делигат. След като приключа с въвеждането в текстовото поле, ще натисна бутона и той трябва да актуализира UIImageView.

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

В 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"]]; 
}

В Interface Builder MainStoryboard.storyboard установих връзката в изгледа First Responder за textFieldReturn на текстовото поле и goPress на бутона към съответните събития и свързах текстовото поле като делегат на този изглед. Сега трябва ли да свържа 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, ако отидете в раздела за връзки на инспектора, когато First Responder е избран, ще видите, че той изброява всичките си изходи. Вие ще искате да свържете (плъзнете от точката) изхода на първия отговор (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