2016-06-19 19 views
2

Swiftの新機能。私は、配列内の値から一連のUIViewを作成しています。私はlongPressの異なる状態で、複数の関数に渡って個々のインデックス値を渡す必要があります。Swiftの関数間でインデックス値を渡す最善の方法

どのような設定方法が最適ですか?

多くの例が見つかりましたが、大部分はUITableViewのindex.row値と関係しています。

編集:私は関連するコードのスリムなダウンバージョンを含んでいます。

func createBlock(title: String) -> UIView { 

    let block = UIView() 
    block.frame = CGRectMake(0, 0, 100, 100) 
    block.translatesAutoresizingMaskIntoConstraints = false 
    block.backgroundColor = UIColor.blackColor() 

    let longPressRec = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPressed(_:))) 
    block.addGestureRecognizer(longPressRec) 

    return block 

} 

func longPressed(sender: UILongPressGestureRecognizer){ 

    switch (sender.state) { 
    case UIGestureRecognizerState.Began: 
     startDrag(sender) 
    case UIGestureRecognizerState.Changed: 
     dragOn(sender) 
    case UIGestureRecognizerState.Ended: 
     stopDrag(sender) 
    default: 
     return 
    } 

} 

func startDrag(sender: UILongPressGestureRecognizer){ 

} 

func dragOn(sender: UILongPressGestureRecognizer){ 

} 

func stopDrag(sender: UILongPressGestureRecognizer){ 

} 
+0

コードしてください。..コードなしであなたを助けることはできません。 – Dershowitz123

+0

投稿コードをお願いしますか? – KFDoom

+0

完了。私は関連性があると考えているものを含めました。返信ありがとうございます。 – Geppelt

答えて

1

送信者のタグを設定します。

拡張子を追加します。その後、

longPressRec.tag = indexPath.row 

そして:

extension UILongPressGestureRecognizer { 

    var tag: Int! { 
     get { 
      return 0 
     } 
     set(newValue) { 
      self.tag = newValue 
     } 
    } 

} 

はこれを試してみてください

func longPressed(sender: UILongPressGestureRecognizer){ 
    let tag = sender.tag 
    //Do something with tag 
} 
+0

indexPath.row?テーブルビューではないので、未解決の状態に戻ります。エクステンションはクラス外になければならないのですか?クラス内では、DECLARATIONはFILE SCOPEでのみ有効です。 – Geppelt

+0

はい、クラス外でなければなりません。 indexPath.rowはデモンストレーションに過ぎません。あなたはあなたがそこに通ってほしい数を置くことができます。 – penatheboss

+0

インデックス値を直接呼び出すことができないのはなぜですか? 'let passedIndex = title [index]' – Geppelt

関連する問題