Iphone 将UITextField的inputAccessoryView设置为其superview
我有一个带添加单元格的UITableView。。。行,希望弹出一个键盘,上面有一个视图,就像在“Messages”应用程序中一样,用户可以在其中键入新单元格的名称 我意识到还有其他几种获取用户数据的方法,还有几种实现我试图实现的功能的方法 例如,当需要创建新的播放列表时,iPod应用程序会显示一个弹出窗口 现在,我有一个隐藏的文本字段,当添加单元格。。。行被按下,我将包含输入字段和确认按钮的视图指定为该隐藏字段的inputAccessoryView。或者,我可以将此视图添加为表的子视图,并使用键盘通知对其进行定位 我只想知道是否有更干净的方法来完成我正在尝试的工作(例如将输入文本字段的inputAccessoryView设置为显示为文本字段的superview)。我已经尝试了几种方法,但是当视图应该关闭时,我似乎无法使用resignFirstResponder关闭键盘。我可以让inputAccessoryView消失,但键盘仍然坚决打开,占据了必要的屏幕空间。此外,当nib的视图是一个UITableView,其中UITableViewController是文件的所有者,而不是一个UIView,其中UIViewController是文件的所有者时,我会遇到一个非常奇怪的错误:“设置表的first responder视图,但我们不知道它的类型(单元格/页眉/页脚)” 提前感谢,,Iphone 将UITextField的inputAccessoryView设置为其superview,iphone,objective-c,uitableview,first-responder,Iphone,Objective C,Uitableview,First Responder,我有一个带添加单元格的UITableView。。。行,希望弹出一个键盘,上面有一个视图,就像在“Messages”应用程序中一样,用户可以在其中键入新单元格的名称 我意识到还有其他几种获取用户数据的方法,还有几种实现我试图实现的功能的方法 例如,当需要创建新的播放列表时,iPod应用程序会显示一个弹出窗口 现在,我有一个隐藏的文本字段,当添加单元格。。。行被按下,我将包含输入字段和确认按钮的视图指定为该隐藏字段的inputAccessoryView。或者,我可以将此视图添加为表的子视图,并使用键
Julian Ceipek在UITextView/UITextField类上使用
设置InputAccessoryView
可以将任何视图添加到键盘顶部。
然后,您创建的视图将使用委派方法通知主视图控制器辞职FirstResponder
因此,为了让您开始:
@protocol TextFieldAccessoryViewDelegate
@required
- (void)keyboardShouldDismiss;
@end
@interface TextFieldAccessoryView : UIView
@property (nonatomic, retain) id<TextFieldAccessoryViewDelegate> delegate;
- (id)initWithFrame:(CGRect)frame withDelegate (id<TextFieldAccessoryViewDelegate>)aDelegate;
@end
我使用了一个标准的导航栏视图,但你可以输入任何你喜欢的内容,包括按钮、文本字段、机器人独角兽的图像等等
如果您没有了解上面代码中的所有内容,那么您可能需要重新学习委派和以编程方式创建视图
- (void)viewDidLoad
{
[self createAccessoryView];
[textField setDelegate:self];
[textField setKeyboardType:UIKeyboardTypeDefault];
[textField setInputAccessoryView:fieldAccessoryView];
}
- (void)createAccessoryView
{
CGRect frame = CGRectMake(0.0, self.view.bounds.size.height, self.view.bounds.size.width, 44.0);
fieldAccessoryView = [[UIToolbar alloc] initWithFrame:frame];
fieldAccessoryView.barStyle = UIBarStyleBlackOpaque;
fieldAccessoryView.tag = 200;
[fieldAccessoryView setBarStyle:UIBarStyleBlack];
UIBarButtonItem *spaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:NSLocalizedString(@"Previous", @""), NSLocalizedString(@"Next", @""), nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segmentedControl setMomentary:YES];
UIBarButtonItem *segmentButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[fieldAccessoryView setItems:[NSArray arrayWithObjects:segmentButton, spaceButton, doneButton, nil] animated:NO];
[segmentButton release];
[spaceButton release];
[doneButton release];
[segmentedControl release];
}
- (void)viewDidLoad
{
[self createAccessoryView];
[textField setDelegate:self];
[textField setKeyboardType:UIKeyboardTypeDefault];
[textField setInputAccessoryView:fieldAccessoryView];
}
- (void)createAccessoryView
{
CGRect frame = CGRectMake(0.0, self.view.bounds.size.height, self.view.bounds.size.width, 44.0);
fieldAccessoryView = [[UIToolbar alloc] initWithFrame:frame];
fieldAccessoryView.barStyle = UIBarStyleBlackOpaque;
fieldAccessoryView.tag = 200;
[fieldAccessoryView setBarStyle:UIBarStyleBlack];
UIBarButtonItem *spaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:NSLocalizedString(@"Previous", @""), NSLocalizedString(@"Next", @""), nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segmentedControl setMomentary:YES];
UIBarButtonItem *segmentButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[fieldAccessoryView setItems:[NSArray arrayWithObjects:segmentButton, spaceButton, doneButton, nil] animated:NO];
[segmentButton release];
[spaceButton release];
[doneButton release];
[segmentedControl release];
}