我有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
不知道如何解决它。
答案 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。