从另一个ViewController类更改UIImageView的.image

时间:2011-12-29 08:26:41

标签: ios xcode uiviewcontroller singleton

我有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

如果我@synthesize

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

不知道如何解决它。

4 个答案:

答案 0 :(得分:0)

其他视图控制器中的那个按钮可以是Bool(开/关),所以当它改变时(true&gt; false),图像也会改变吗?只是一个想法......我想一想

答案 1 :(得分:0)

首先,让自己熟悉如何在这个答案How to use delegate methods to pass objects between two view controllers?中使用两个不同视图控制器之间的协议和调用方法。

让object1(ViewController1)拥有imageView,而object2(ViewController2)拥有按钮。所有按钮都连接到一个方法。我假设你有object1中的图像。所以,你需要的是使用某种方式来识别object1中的图像,也许是按钮的标签。现在你应该在object2中有一个指向object1的对象delegate。然后,您可以使用按钮方法

进行调用
[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协议。

答案 2 :(得分:0)

在secondviewcontroller中取一个字符串并声明属性并合成它。然后当你从firstviewcontroller转到第二个视图然后像第二个view.somestring = @“one.png”一样更改字符串。在视图中加载了secondviewcontroller使用相同的字符串来更改图像。

答案 3 :(得分:0)

您也可以尝试使用NSNotification。