Изменение .image UIImageView из другого класса ViewController - PullRequest
0 голосов
/ 29 декабря 2011

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

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

Я читал кое-что о синглтон-классено:

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

Спасибо.

ОБНОВЛЕНИЕ:

Я хочу вызвать 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

ОБНОВЛЕНИЕ 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

If I @synthesize:

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

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

Ответы [ 4 ]

0 голосов
/ 30 декабря 2011

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

0 голосов
/ 29 декабря 2011

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

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

[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 голосов
/ 29 декабря 2011

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

0 голосов
/ 29 декабря 2011

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

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