【问题标题】:UISegmentedController freezes after pressing same segment twiceUISegmentedController 在按下同一段两次后冻结
【发布时间】:2017-03-24 11:02:22
【问题描述】:

我正在结合 Swift 代码和第三方库(用 Obj-C 编写)。我有一个带有 u UISegmentedController 的 UIViewController,我想在每次推送一个段或再次推送同一段时触发它。

在我的 Swift 代码中,我有以下内容:

override func viewDidLoad() {
        super.viewDidLoad()
        //setup
        items = ["newTab".localized,"topTab".localized,"categoryTab".localized]
        carbonTabSwipeNavigation = CarbonTabSwipeNavigation(items: items as [AnyObject], delegate: self)
        carbonTabSwipeNavigation.insertIntoRootViewController(self)
        self.style()
        self.view.userInteractionEnabled = true


        carbonTabSwipeNavigation.carbonSegmentedControl!.addTarget(self, action: #selector(OverviewFolder.changesMade), forControlEvents: UIControlEvents.ValueChanged)
    }
func changesMade() {
        switch carbonTabSwipeNavigation.carbonSegmentedControl!.selectedSegmentIndex {
        case 0:
            print("tab 1")
        case 1:
            print("tab 2")
        case 2:
            print("tab 3")
        default:
            print("nope")
        }
    }

在库中我添加了以下代码:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSInteger current = self.selectedSegmentIndex;
    [super touchesEnded:touches withEvent:event];
    if (current == self.selectedSegmentIndex)
        [self sendActionsForControlEvents:UIControlEventValueChanged];
}

所以基本上我想在每次用户按下一个段时触发一个 ValueChanged 操作(即使它是同一个段)。目前,当我按下同一段时,它会第二次触发,但之后 UISegmentController 变得无响应(无法再切换段)。

【问题讨论】:

  • 这是什么方法:#selector(OverviewFolder.changeImageView)?
  • @AlexanderDoloz 抱歉,这是复制/粘贴错误,我更改了它。应该是changesMade(在代码中没问题)

标签: ios objective-c swift uisegmentedcontrol


【解决方案1】:

最终对我有用的是:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];

    [self sendActionsForControlEvents:UIControlEventTouchUpInside];
}

carbonTabSwipeNavigation.carbonSegmentedControl!.addTarget(self, action: #selector(OverviewFolder.changesMade), forControlEvents: UIControlEvents.TouchUpInside)

【讨论】:

    【解决方案2】:

    您应该使用 touchesEnded 函数,当用户从屏幕上移开手指并使用 sendActions 时调用该函数:

    目标-C

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    
    [self sendActionsForControlEvents:UIControlEventTouchUpInside];
    }
    

    斯威夫特

    override func touchesEnded(_ touches: Set<AnyHashable>, withEvent event: UIEvent) {
    super.touchesEnded(touches, withEvent: event)
    self.sendActions(for: .touchUpInside)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2012-10-15
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多