【发布时间】:2013-08-30 09:19:33
【问题描述】:
我正在尝试创建 UIView 的自定义子类,如下所示:
我创建了一个带有 UIView 的 .xib,其中包含一个 Picker 对象和 Toolbar 对象,连接了 Outlets 和操作。
CustomPickerView.h
#import <UIKit/UIKit.h>
@interface CustomPickerView : UIView
@property (strong, nonatomic) IBOutlet UIDatePicker* datePicker;
@property (strong, nonatomic) IBOutlet UIBarButtonItem* doneButton;
-(IBAction) buttonDonePush:(id)sender;
@end
CustomPickerView.m
#import "CustomPickerView.h"
@implementation CustomPickerView
-(id) init
{
self=[[[NSBundle mainBundle] loadNibNamed:@"CustomPickerView" owner:self options:nil] objectAtIndex:0];
return self;
}
-(void) buttonDonePush:(id)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"CustomPickerViewDoneButtonPush" object:nil userInfo:[NSDictionary dictionaryWithObject:self.datePicker.date forKey:@"date"]];
}
@end
最后,在我的 ViewController 中,我在 viewDidLoad 方法中实例化对象。
- (void)viewDidLoad
{
[super viewDidLoad];
self.customPickerView=[[CustomPickerView alloc] init];
self.customPickerView.datePicker.datePickerMode=UIDatePickerModeTime;
self.dateField.inputView=self.customPickerView;
}
当用户点击 self.dateField 时,我的 CustomPickerView 会很好地弹出来代替标准键盘。
问题是当用户从我的 CustomPickerView 类中点击完成按钮时,buttonDonePush 操作不会触发。
【问题讨论】:
-
你怎么知道它不会触发?您是否已将控制器添加为该通知的观察者?
-
你把doneButton的目标设置为outlet了吗?
-
self=[[[NSBundle mainBundle] loadNibNamed:@"CustomPickerView" owner:self options:nil] objectAtIndex:0];xib 的所有者为 nil,因为 self 未初始化。 -
你为什么不使用委托,而不是过度杀伤/不适当的通知?
-
查看我的答案下方的 cmets。
标签: ios objective-c class uiview iboutlet