(这应该很简单。但是它让我疯了好几个小时。) 我只是试图从它的UIView中调用一个ViewController方法。
myViewController声明并创建一个UIView:
myUIView = [[viewCreator alloc] init…];
我的myViewController也有一个方法:
-(void)inABottle{
NSLog(@"Hello.");
}
在UIView中,创建了一个UIButton。这个按钮有一个方法的“选择器” - 在UIView中 - 然后尝试在ViewController中调用'inABottle'方法。在UIView里面:
...
[myButton addTarget:self action:@selector(isPressed) forControlEvents:UIControlEventTouchUpInside];
-(void)isPressed{
[myViewController inABottle];// <<< This is where I have spent my day.
}
(ViewController头文件在UIView中被#import编辑。)
非常感谢一些帮助。当然这应该很简单!
答案 0 :(得分:3)
这是协议和授权的用途。想一想UITableView
如何处理这个问题。
@class MyView;
@protocol MyViewDelegate
- (void)myViewIsInABottle:(MyView *)view;
@end
@interface MyView : UIView
@property (weak) id<MyViewDelegate> delegate;
@end
@implementation MyView
-(void)isPressed{
[self.delegate myViewIsInABottle:self];
}
...
@end
答案 1 :(得分:1)
在视图中创建一个属性,并在创建它时将其设置为当前视图控制器:
viewcontroller.m:
myUIView = [[viewCreator alloc] init...];
myUIView.myViewController = self;
view.h:
@property (weak) ViewController *myViewController;//weak or assign depending if you are using ARC or not, and ViewController should be the class of your view controller
view.m:
@synthesize myViewController;
然后只需调用方法,就像问题中的代码一样。
您还应该研究如何使用委托,这是您应该何时使用委托的完美示例。