【问题标题】:UISegmentedControl buttons stop workingUISegmentedControl 按钮停止工作
【发布时间】:2013-02-27 18:27:06
【问题描述】:

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

【问题讨论】:

    标签: ios uitoolbar uisegmentedcontrol uicontrol


    【解决方案1】:

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

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

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

    我建议使用UIButton

    【讨论】:

    • 感谢您提供重置所选片段的提示,原来如此。使用分段控件而不是按钮的原因只是装饰性的:我更喜欢这些“上一个/下一个”按钮像段一样连接到单个控件中,而不是在它们之间有空格的不同按钮。
    • 虽然工作量更大,但您可以使用自己的背景图像自定义UIButton,使其看起来像连接的按钮。我通常会尽量避免以非预期方式使用控件的实现(例如,使用选择控件作为按钮),但如果它看起来/像你喜欢的那样工作,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多