我的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
只是没有被调用,按钮看起来正常,没有被禁用,但触摸没有被注册。有时它是“上一个”按钮,有时它是“下一个”按钮,从不同时发生,有时它们都能正常工作。一旦其中一个按钮卡住,(临时)修复它的唯一方法是在不使用工具栏的情况下点击另一个文本字段或关闭键盘并再次开始编辑。可能是什么问题?
答案 0 :(得分:1)
当您真正想要UIButton
的行为/上一个/下一个控件时,分段控件不是一个好的选择。
我认为您正在使用分段控件初始化工具栏而不选择任何段。因此,当您第一次点击上一个/下一个时,值会更改,并为该特定的分段控件选择该段。当您继续点击上一个/下一个时,最终您会看到已经选择了一个段的分段控件,并且该段在点击时不会触发值更改事件,因为它已经是选定的段。
您可以在switchTextField:
方法中明确取消选择所选的细分(请确保不要递归触发switchTextField:
),或者您可以更改实施以使用UIButton
个对象进行上传/接下来而不是分段控制。
我建议使用UIButton
。