2017-12-18 20 views
1

を使用していますURL.schemeUITableViewCellクラス内のUITextViewでハッシュタグをタップしていますが、2つの問題があります。UITextViewのUITextViewでタップした後、UITableViewCellクラスから

最初セルクラスからどのように鳴るか。私はperformセグ機能を持っていません。 UITableViewクラスでのみ見つかりました。

UIViewControllerにハッシュタグ名または参照名を送信する方法。デリゲートメソッドを使用するか、segueを実行して送信することができます。しかし、もう一度、私は細胞クラスからどのようにセグメントするでしょう。

次のコードは、これを行うにはいくつかの異なる方法があります

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { 

    let path = URL.absoluteString 
    switch URL.scheme! { 
    case "hash" : 
     let hash = path.removingPercentEncoding?.components(separatedBy: ":").last 
     print(hash!) // ---> Retriving tapped on hash name correctly 

    case "mention" : 
     let mention = path.removingPercentEncoding?.components(separatedBy: ":").last 
     print(mention!) // ---> Retriving tapped on mention name correctly 
    default: 
     print("Just a regular link \(path.removingPercentEncoding!)") 
    } 
    return true 
} 

答えて

0

UITableViewCellクラスで書かれているが、私はおそらく、カスタムデリゲートのプロトコルを使用します。次のようにセルファイルにプロトコルを定義します。

protocol MyTableViewCellDelegate: class { 
    func myTableViewCell(_ cell: MyTableViewCell, shouldSelectHashTag tag: String) 
} 

は、あなたのテーブルビューセルクラスにプロパティを追加します。

class MyTableViewCell: UITableViewCell { 
    // make sure the property is `weak` 
    weak var delegate: MyTableViewCellDelegate? 
} 

私はあなたのテーブルビューのデータソースもからのビューコントローラであると仮定していますあなたはセグを実行したい。このビューコントローラを作成し、新たなプロトコルに準拠:

extension MyViewController: MyTableViewCellDelegate { 
    func myTableViewCell(_ cell: MyTableViewCell, shouldSelectHashTag tag: String) { 
     performSegue(withIdentifier: "MyHashTagSegue", sender: tag) 
    } 
} 

cellForRowAtIndexPathデータソース方式内部テーブルビューセルの代理人としてあなたのビューコントローラを割り当てます

let cell: MyTableViewCell = <dequeue the cell> 
cell.delegate = self 

最後に忘れてはいけませんテーブルビューのセルからデリゲートメソッドを呼び出します。

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { 
    let tag = <get the hash tag> 
    delegate?.myTableViewCell(self, shouldSelectHashTag: tag) 
} 
+0

偉大な答えと私はそれが動作すると思います。しかし、私のViewControllerは、私がセグをしようとしているものとは異なるストーリーボードに入っています。私はこの問題をどのように解決できると思いますか? –

+0

ストーリーボードリファレンスを使用できます。これは、ビューコントローラのようにストーリーボードにドラッグすることができる別のオブジェクトで、セグを付けることができます。 – daltonclaybrook

+0

はい、これは私が選択したストーリーボードにinstantiateViewControllerをしたものです。ありがとう:)) –

関連する問題