1

(这应该很简单。但它已经让我发疯了好几个小时。)我只是想从它的 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 。)

非常感谢一些帮助。当然这应该很简单!

4

2 回答 2

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
于 2012-07-19T17:26:17.783 回答
1

在视图中创建一个属性,并在创建时将其设置为当前视图控制器:

视图控制器.m:

myUIView = [[viewCreator alloc] init...];
myUIView.myViewController = self;

视图.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

视图.m:

@synthesize myViewController;

然后就像在问题中的代码中一样调用该方法。

您还应该研究如何使用委托,这是您何时应该使用委托的完美示例。

于 2012-07-19T17:22:37.117 回答