Ios UI分段控制按钮停止工作

Ios UI分段控制按钮停止工作,ios,uitoolbar,uisegmentedcontrol,uicontrol,Ios,Uitoolbar,Uisegmentedcontrol,Uicontrol,我的iOS应用程序有一个包含十几个字段的表单,我想在键盘上方添加“上一个”/“下一个”按钮,以帮助用户在字段之间移动。我有这样的想法: for (UITextField *t in _textfields) { t.delegate = self; UIToolbar *toolbar = [[UIToolbar alloc] init]; [toolbar setBarStyle:UIBarStyleBlackTranslucent]; UISegmente

我的iOS应用程序有一个包含十几个字段的表单,我想在键盘上方添加“上一个”/“下一个”按钮,以帮助用户在字段之间移动。我有这样的想法:

for (UITextField *t in _textfields) {
    t.delegate = self;

    UIToolbar *toolbar = [[UIToolbar alloc] init];
    [toolbar setBarStyle:UIBarStyleBlackTranslucent];

    UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:@[@"Previous", @"Next"]];
    [segControl addTarget:self action:@selector(switchTextField:) forControlEvents:UIControlEventValueChanged];
    segControl.segmentedControlStyle = UISegmentedControlStyleBar;
    segControl.tag = [_textfields indexOfObject:t];
    if (segControl.tag == 0) [segControl setEnabled:NO forSegmentAtIndex:0];
    else if (segControl.tag == [_textfields count] - 1) [segControl setEnabled:NO forSegmentAtIndex:1];

    [segControl sizeToFit];

    UIBarButtonItem *segItem = [[UIBarButtonItem alloc] initWithCustomView:segControl];

    UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.view action:@selector(endEditing:)];
    [toolbar setItems:@[segItem, flexButton, doneButton]];
    [toolbar sizeToFit];
    [t setInputAccessoryView:toolbar];
}

我遇到的问题是,每隔一段就停止工作。方法
switchTextField
只是没有被调用,按钮看起来正常,没有被禁用,但是触摸没有注册。有时是“上一个”按钮,有时是“下一个”按钮,决不能同时按下两个按钮,有时两个按钮都能正常工作。一旦其中一个按钮卡住,唯一(暂时)修复它的方法是不使用工具栏点击另一个文本字段,或者关闭键盘并再次开始编辑。有什么问题吗?

如果您确实希望上一个/下一个控件具有
ui按钮的行为,则分段控件不是一个好的选择

我认为正在发生的是,您正在使用分段控件初始化工具栏,并且没有选择分段。因此,当您第一次点击“上一次/下一次”时,该值将发生变化,并且该分段将被选择用于该特定分段控件。当您继续点击“上一个/下一个”时,最终您会看到一个分段控件,该控件已经选择了一个分段,并且该分段在点击时不会触发值更改事件,因为它已经是选定的分段

您可以在
switchTextField:
方法中显式取消选择所选段(确保不会递归触发
switchTextField:
),或者您可以将实现更改为使用
UIButton
对象作为prev/next,而不是分段控件


我建议使用
ui按钮

感谢您提供重置所选片段的提示,这正是它的功能所在。使用分段控件而不是按钮的原因很简单:我更喜欢将这些“上一个/下一个”按钮像单个控件中的分段一样连接起来,而不是在它们之间留有空格的不同按钮。虽然这需要更多的工作,您可以使用自己的背景图像自定义
ui按钮
,使其看起来像连接的按钮。我通常会尽量避免以非预期的方式使用控件的实现(例如,使用选择控件作为按钮),但如果它看起来/工作起来像你喜欢的,那就太好了。