2016-11-10 15 views
5

Swiftコードとサードパーティライブラリ(Obj-Cで書かれています)を組み合わせています。私はUISegmentedControllerのUIViewControllerを持っています。セグメントがプッシュされるたびにトリガーしたいのですが、同じセグメントが再びにプッシュされました。私のスウィフトコードで同じセグメントを2回押した後、UISegmentedControllerがフリーズする

、私は次のようしている:私は次のコードを追加したライブラリで

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]; 
} 

を私はすべての時間AにValueChangedアクションをトリガーしますユーザーはセグメントを押します(同じセグメントであっても)。現在、同じセグメントを押すともう一度トリガされますが、その後はUISegmentControllerが応答しなくなります(セグメントをもう切り替えることはできません)。

+0

何方法はこれです: '#selector(OverviewFolder.changeImageView)'? –

+0

@AlexanderDoloz申し訳ありませんが、これはコピー/ペーストエラーです。変更しました。 changesMade(コード内でOKだった) – SoundShock

答えて

3

何最後に私のために働いたことは以下の通りです:

- (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を使用する必要があります:

のObjective-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) 
} 
関連する問題