UISegmentedControl按钮停止工作
问题描述:
我的iOS应用程序有一个包含十几个字段的窗体,我想在键盘上添加“Previous”/“Next”按钮以帮助用户在字段之间移动。我有这样的事情:UISegmentedControl按钮停止工作
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
只是不被调用,该按钮看起来正常,没有禁用,但触摸不注册。有时它是“上一个”按钮,有时它是“下一个”按钮,从不同时出现,有时它们都可以正常工作。一旦其中一个按钮卡住了,暂时修复它的唯一方法是在不使用工具栏的情况下点击另一个文本框,或者关闭键盘并再次开始编辑。可能是什么问题呢?
答
当您确实需要UIButton
用于您的上一个/下一个控件时,分段控件不是一个好选择。
我认为正在发生的事情是,您正在使用分段控件初始化工具栏,并且没有选择任何段。因此,当您第一次点击上一页/下一页时,值会更改,并为该特定分段控件选择该段。当您继续点击上一个/下一个时,最终您会看到一个已经选定片段的分段控件,并且该片段在点击时不会触发值更改事件,因为它已经是选定的片段。
可以明确地取消选片段在switchTextField:
方法(确保你不会触发switchTextField:
递归),或者你可以改变你的方案中使用UIButton
对象进行上一页/下一页,而不是分段控制。
我推荐使用UIButton
。
感谢您的提示重置选定的细分,这正是它是什么。使用分段控制而不是按钮的原因仅仅是表面化:我更喜欢当这些“prev/next”按钮在单个控件中像段一样连接,而不是在它们之间有空格的不同按钮。 – SaltyNuts 2013-02-27 19:28:53
虽然它有点更多的工作,但您可以使用自己的背景图像自定义'UIButton',看起来像连接的按钮。我通常会尽量避免使用控件的实现方式(例如,使用选择控件作为按钮),但如果它看起来/按照您喜欢的方式运行,那就太棒了。 – XJones 2013-02-27 19:58:51