我正在尝试使用UIPopover
中的按钮在我的主UITextView
中创建UIViewController
我看起来像这样的代码(PopoverView.h
文件) :
@protocol PopoverDelegate <NSObject>
- (void)buttonAPressed;
@end
@interface PopoverView : UIViewController <UITextViewDelegate> { //<UITextViewDelegate>
id <PopoverDelegate> delegate;
BOOL sendDelegateMessages;
}
@property (nonatomic, retain) id delegate;
@property (nonatomic) BOOL sendDelegateMessages;
@end
然后在我的PopoverView.m
文件中:
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton * addTB1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
addTB1.frame = CGRectMake(0, 0, 100, 50);
[addTB1 setTitle:@"Textbox One" forState:UIControlStateNormal];
[self.view addSubview:addTB1]; // Do any additional setup after loading the view from its nib.
[addTB1 addTarget:self action:@selector(buttonAPressed)
forControlEvents:UIControlEventTouchUpInside];
}
- (void)buttonAPressed
{
NSLog(@"tapped button one");
if (sendDelegateMessages)
[delegate buttonAPressed];
}
还在我的MainViewController.m
:
- (void)buttonAPressed {
NSLog(@"Button Pressed");
UITextView *textfield = [[UITextView alloc] init];
textfield.frame = CGRectMake(50, 30, 100, 100);
textfield.backgroundColor = [UIColor blueColor];
[self.view addSubview:textfield];
}
我正在使用委托协议来链接popover和ViewController但我仍然坚持如何获取BOOL
语句来链接PopoverView和MainViewController中的-(void)buttonAPressed
以便当我按下Popover中的按钮,主VC中会出现textview。我该怎么做呢?
答案 0 :(得分:2)
在您创建MainViewController
的{{1}}中,请确保设置其PopoverView
属性,否则向delegate
中的delegate
发送消息将不会执行任何操作。< / p>
例如,在PopoverView
:
MainViewController.m
我不确定你为什么需要PopoverView *pov = [[PopoverView alloc] initWithNibName:nil bundle:nil];
pov.delegate = self; // <-- must set this
thePopoverController = [[UIPopoverController alloc] initWithContent...
变量。即使使用该bool,您也必须设置sendDelegateMessages
属性,以便delegate
具有实际的对象引用以将消息发送到。
如果你想确保PopoverView
对象已经实现了你要调用的方法,你可以这样做:
delegate
此外,if ([delegate respondsToSelector:@selector(buttonAPressed)])
[delegate buttonAPressed];
属性应使用delegate
(或assign
,如果使用ARC)而不是weak
声明(请参阅Why use weak pointer for delegation?获取解释):
retain
另一件事是,如果您不使用ARC,则需要在@property (nonatomic, assign) id<PopoverDelegate> delegate;
中[textfield release];
方法的末尾添加buttonAPressed
以避免内存泄漏。