2016-12-02 5 views
2

I StatusTextというUITextViewを持つカスタムセルがあります。私はtextView内のすべての@記号を見つけ出し、それをリンクに変える拡張子を持っています。そのユーザー名リンクをクリックして、プロファイルビューコントローラーに移動したいと考えています。ここでカスタムセルのリンクUITextView登録タップ

はCustomCellの次のコードです:

import UIKit 

class profileCell: UITableViewCell, UITextViewDelegate { 
    @IBOutlet weak var UserImage: UIImageView! 
    @IBOutlet weak var UserName: UILabel! 
    @IBOutlet weak var Time: UILabel! 
    @IBOutlet weak var Likes: UILabel! 

    @IBOutlet weak var Dislikes: UILabel! 

    @IBOutlet weak var StatusText: UITextView! 

    @IBOutlet weak var LikeButton: UIButton! 

    @IBOutlet weak var DislikeButton: UIButton! 

     override func awakeFromNib() { 
      StatusText.delegate = self 
     } 

func StatusText(StatusText: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool { 
    /* perform your own custom actions here */ 
    print("firing this right now") 

    return true // return true if you still want UIAlertController to pop up 
    } 
} 

答えて

0

あなたが他のビューコントローラにセグエを行い、両者の間にユーザ名を渡したいようですね。 2つのView Controller間でSegueを作成する方法についてはApple's documentationをチェックし、あるView Controllerから次のView Controllerへデータを渡す方法についてはStackOverflow answerを参照してください。また、デリゲートでメソッドを作成するときは、iOSがカスタム名付きメソッドを呼び出すことを知らないため、メソッド名をプロトコルのようにスタブする必要があります。

func textView(_ textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool { 
    guard let username = self.getUsernameFrom(URL) else { return false } // I'll let you implement this as an exercise. :) 

    let profileVC = ProfileViewController() 
    profileVC.username = username 

    profileVC.performSegueWithIdentifier("profileSegue", sender: self) 

    return true 
} 
+0

完璧ですが、問題は、リンクをクリックすると機能が起動しないことです。私はcustomCell.swiftクラスに関数を入れようとしましたが、リンクがクリックされても何も起こりません。選択されるように設定されています。私は関数がセル内のリンクを見つけることができないと思う。 –

+0

@MatthewFoster、 'awakeFromNib'が呼び出されていることを確認できますか?' StatusText'はこの時点でインスタンス化されていますか? –

+0

したがって、awakeFromNibは、tableViewが最初にビューコントローラでロードされるときに呼び出されます。表を上下にスクロールすると、customCellセルが表示されているときにawakeFromNibは起動しません。 –

0

ので、代わりのデリゲートcustomCellを作る:あなたが最後のリンクからオプション#2に従った場合、最終的な機能は、この(:固定、今取り組んで答えが見つかったこと編集)のようになります。私はviewControllerをデリゲートにして、@ kgalemanが次のように言ったのを行いました。

func textView(_ textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool { 
    /* perform your own custom actions here */ 

    print(URL) 

    return true // return true if you still want UIAlertController to pop up 

} 
+0

うれしかった!私は、適切なメソッドのタイトルとその理由についての説明で私の答えを更新したので、この質問につきものになる未来の初心者は、修正の内容とその理由を理解することができます。乾杯! –

関連する問題