Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将UITextField的inputAccessoryView设置为其superview_Iphone_Objective C_Uitableview_First Responder - Fatal编程技术网

Iphone 将UITextField的inputAccessoryView设置为其superview

Iphone 将UITextField的inputAccessoryView设置为其superview,iphone,objective-c,uitableview,first-responder,Iphone,Objective C,Uitableview,First Responder,我有一个带添加单元格的UITableView。。。行,希望弹出一个键盘,上面有一个视图,就像在“Messages”应用程序中一样,用户可以在其中键入新单元格的名称 我意识到还有其他几种获取用户数据的方法,还有几种实现我试图实现的功能的方法 例如,当需要创建新的播放列表时,iPod应用程序会显示一个弹出窗口 现在,我有一个隐藏的文本字段,当添加单元格。。。行被按下,我将包含输入字段和确认按钮的视图指定为该隐藏字段的inputAccessoryView。或者,我可以将此视图添加为表的子视图,并使用键

我有一个带添加单元格的UITableView。。。行,希望弹出一个键盘,上面有一个视图,就像在“Messages”应用程序中一样,用户可以在其中键入新单元格的名称

我意识到还有其他几种获取用户数据的方法,还有几种实现我试图实现的功能的方法

例如,当需要创建新的播放列表时,iPod应用程序会显示一个弹出窗口

现在,我有一个隐藏的文本字段,当添加单元格。。。行被按下,我将包含输入字段和确认按钮的视图指定为该隐藏字段的inputAccessoryView。或者,我可以将此视图添加为表的子视图,并使用键盘通知对其进行定位

我只想知道是否有更干净的方法来完成我正在尝试的工作(例如将输入文本字段的inputAccessoryView设置为显示为文本字段的superview)。我已经尝试了几种方法,但是当视图应该关闭时,我似乎无法使用resignFirstResponder关闭键盘。我可以让inputAccessoryView消失,但键盘仍然坚决打开,占据了必要的屏幕空间。此外,当nib的视图是一个UITableView,其中UITableViewController是文件的所有者,而不是一个UIView,其中UIViewController是文件的所有者时,我会遇到一个非常奇怪的错误:“设置表的first responder视图,但我们不知道它的类型(单元格/页眉/页脚)”

提前感谢,,
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];

    }