0

我的 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只是没有被调用,按钮看起来很正常,没有被禁用,但是触摸没有注册。有时是“上一个”按钮,有时是“下一个”按钮,绝不会同时出现,有时它们都可以正常工作。一旦其中一个按钮卡住,(暂时)修复它的唯一方法是在不使用工具栏的情况下点击另一个文本字段或关闭键盘并重新开始编辑。可能是什么问题呢?

4

1 回答 1

1

UIButton当您真的想要上一个/下一个控件的行为时,分段控件不是一个好的选择。

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

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

我建议与UIButton.

于 2013-02-27T19:00:54.940 回答