2011-12-29 6 views
0

У меня есть ViewController, у которого есть встроенный UIImageView. Другой ViewController имеет кнопку, которая должна изменить UIImageView's.image щелчком.Изменение изображения UIImageView с другого класса ViewController

Каков наилучший способ достичь этого?

Я читал кое-что о классе одноплодной но:

  • Я не совсем уверен, если я получаю точку в singleton class правильно, может быть и так. может объяснить это мне легкими словами?
  • Существует способ использования AppDelegate ... но я думаю, что это не лучшее решение.

спасибо.

UPDATE:

Ich хочет позвонить setUpExternalDisplay -методу (который использует переменный экземпляр) в FirstAssistantViewController. Мой код:

FirstAssistantViewController.h

#import <UIKit/UIKit.h> 
#import "DetailTableViewController.h" 

@interface FirstAssistantViewController : UIViewController <DetailTableViewControllerDelegate> 
{ 
DetailTableViewController * detailTableViewController; 
} 

DetailTableViewController.h

#import "AssistantRootViewController.h" 
#import "FirstAssistantViewController.h" 

@protocol DetailTableViewControllerDelegate 
- (void) setUpExternalDisplay; 
@end 

@interface DetailTableViewController : UITableViewController <UISplitViewControllerDelegate, UIActionSheetDelegate, DetailTableViewControllerDelegate> 
{ 
id <DetailTableViewControllerDelegate> delegate; 
} 
- (void)showModalHelpViewController; 
- (void)showModalAssistantViewController; 
@end 

UPDATE 2:

Он теперь делает следующие сообщения об ошибках:

Cannot find protocol declaration for 'DetailTableViewControllerDelegate'; did you mean 'UIPageViewControllerDelegate'?

Property 'DTVCdelegate' requires method 'DTVCdelegate' to be defined - use @synthesize, @dynamic or provide a method implementation

Если я @synthesize:

Existing ivar 'DTVCdelegate' for unsafe_unretained property 'DTVCdelegate' must be __unsafe_unretained

Не знаю, как ее решить.

ответ

0

Вы также можете попробовать использовать NSNotification.

+0

У вас есть фрагмент кода для этого с несколькими контроллерами? – DAS

+0

Сделал это, отлично работает, спасибо! – DAS

0

Может ли эта кнопка в другом контроллере представления быть Bool (вкл./Выкл.), Поэтому при изменении (true> false) изображение также изменяется? Просто идея ... Я думаю об этом

+0

Нет. У меня есть куча 'UIImages' и кнопок. Каждая кнопка устанавливает новый 'UIImage'. – DAS

+0

Все ли это на одном взгляде? – Szwedo

+0

У меня есть внешний Дисплей и ViewController, который управляет им. – DAS

0

Прежде всего, познакомьтесь с тем, как использовать протоколы и методы вызова между двумя разными контроллерами представлений из этого ответа How to use delegate methods to pass objects between two view controllers?.

Пусть у объекта 1 (ViewController1) есть изображениеView и object2 (ViewController2) есть кнопки. Все кнопки подключены к одному методу. Я предполагаю, что у вас есть изображения в объекте1. Итак, вам нужно использовать какой-то способ идентифицировать изображение в объекте1, возможно, тег кнопки. Теперь у вас должен быть объект delegate в объекте2, который указывает на объект1.Затем можно вызвать в методе кнопки

[self.delegate changeImageTo:button.tag]//I am just using tag in this case, but you can use other ways 

В вашем ViewController1, вы должны реализовать changeImageTo:

-(void) changeImageTo:(NSUInteger)imageID 
{ 
imageView.image=//get it from the image source using imageID 
[imageView setNeedsDisplay]; 
} 

Создание протокола в ViewContoller2 в ViewController2Delegate

@protocol ViewController2Delegate 
-(void) changeImageTo:(NSUInteger)imageID; 
@end 

и создать делегат как переменная экземпляра в классе ViewController2.

id <ViewController2Delegate> delegate; 

Не забудьте также создать для него недвижимость.

@property (nonatomic,assign) id <ViewController2Delegate> delegate; 

и синтезировать в .m файл

@synthesize delegate; 

и реализовать ViewController2Delegate протокол в ViewController1 классе.

+0

Как создать делегат этого объекта с помощью указателя? – DAS

+0

@ Дарвин Я обновил свой ответ. Когда вы создаете объект 2, просто назначьте его делегату object1 – MadhavanRP

+0

. Я не работаю. Я думаю, что ваш ответ действительно хорош, но я не понимаю, как это кодировать. Я выполнил '@ protocol' и' id DAS

0

взять одну строку в secondviewcontroller и объявить свойство и синтезировать его. Затем, когда вы переходите от firstviewcontroller ко второму представлению, измените строку, как этот второй view.somestring = @ "one.png". secondviewcontroller использует одну и ту же строку для изменения изображения.

Смежные вопросы