2016-11-02 7 views
0

のすべてを持つ特定のビューコントローラを呼び出す。私は一度クリックしたProfileViewControllerを提示するためのカスタムクラスのプロファイルボタンを持っています。 ProfileButtonはUIButtonを継承し、いくつかのビューコントローラのナビゲーションバーに表示されます。私は各VCのコードに関数を追加できることを知っていますが、私はこれをより洗練された方法で行うことをお勧めします。私がこれまで試したことはある: - ProfileButtonクラス内からProfileViewControllerを呼び出すカスタムボタンクラス

  1. :私はstoryboard.instantiateViewControllerWithIdentifierを使用してProfileViewControllerを参照することはできません。

  2. デリゲートの使用:これは、各VCにコードを追加することを意味します。前もって感謝します。

私はボタンクラスのコードを投稿しました。私は、この結果を達成する単一の場所にコードを配置する方法を探しています。

class ProfileButton: UIButton { 

    override func awakeFromNib() { 

     self.addTarget(self, action: #selector(self.profileButtonPressed), forControlEvents: .TouchDown) 

    } 

} 

編集: -

問題は、VCを提示するか、却下されていません。私は、ProfileController1、ViewController2、ViewController3などにself.presentViewController(animated:true、completion:nil)を追加せずにProfileVCを使用してProfileVCを表示する最もエレガントな方法を探しています。

ここに画像がありますあなたはスクリーンシステムを作る方法を知りたいされているようですが、私は通常、これを行う方法ですので、ここで思わ

Illustration

答えて

0

「プロファイル」ボタンが付いたナビゲーションバーを持つすべてのView Controllerの基本クラスを持つことで、これを行うことができます。

基本クラスにprofileボタンアクションを記述すると、拡張クラスのアクションによって基本クラスメソッドが呼び出されます。

0

- :どのようにそのセットアップを示しています。

私はUIView "isHidden"のプロパティを使用して、ビューを表示したり隠したりします。ビューが非表示になると、ビューはviewControllerにアタッチされる可能性のあるタッチ(UIGestureRecognizers)に応答しません。したがって、別のviewController(またはUIButton)から新しいビューに切り替える場合は、現在のビューを隠すように設定し、開いている新しいビューでisHiddenをfalseに設定します。

私は通常、ビューを設定するために使用する「表示」機能を作成します。これを使用したい場合や、組み込みの関数を使用したい場合は、あなた次第です。

+0

応答のためにありがとう、C1FR1。私が各VCにプロファイルビューを追加する必要があるように聞こえていると思われるものは、繰り返しは含まれますが、この場合はビューが必要です。他のVCでProfileVCを呼び出す関数を持つよりも安い方法が必要です。 –

0

私はおそらくあなたの問題では少しばかりです。しかし、私が聞いているのは:

  • (1)ナビゲーションバーに複数のビューが埋め込まれています。

  • (2)このナビゲーションバーには、UIButtonまたはUIBarButtonのサブクラスであるプロファイルボタンがあります。

  • (3)このプロファイルボタンをタップすると、(独自のビューコントローラを使用して)プロファイルビューを表示したいのですが... ...?(a)あなたはで、はプロファイルボタンが必要で、ナビゲーションバーが表示されないこと、そして(b)終了したらアイテム#1に戻りたいと思うでしょう。

  • (4)最後に、項目#2と#3を#1から切り離したいとします。つまり、この「プロファイル」メカニズムを1回だけコード化することを望みます。

このような場合は、私は二つのことを自分自身に尋ねたい:

  • (1)どのようにAppleがそれをするのでしょうか?アプリ内の「設定」ビューのようなものかもしれません。

  • (2)別のアプリはどうしますか?

私の提案:

  • (1)あなたは、プロファイルビューをモーダルにすることはできますか?これは、ユーザが何かをタップしてクリアするように強制する方法です。

  • (2)プロファイルビューを呼び出し、表示されているときにナビゲーションバーを適切に操作できますか?ここでは、バー全体を隠すか、またはプロファイルボタンを別のボタン(さまざまな方法で行うことができます)と入れ替えることを考えています。

いずれかの方法は、あなたが効果的に一箇所にすべてのあなたのコードを配置した、とあなたの個々のビューコントローラに必要なだけのコードでは、彼らの見解が正しく設定されて表示されているとき、必ずナビゲーションバーを表示することです。

0

あなたはこのようtopViewControllerメソッドを実装profileButtonPressed方法

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as? ProfileViewController { 
    UIApplication.topViewController()?.present(vc, animated: true, completion: nil) 
} 

の内側に、このようなものを使用することができます。

extension UIApplication { 
class func topViewController() -> UIViewController? { 
    return UIApplication.topViewController(base: nil) 
} 
class func topViewController(base: UIViewController?) -> UIViewController? { 
    var baseView = base 
    if baseView == nil { 
     baseView = (UIApplication.shared.delegate as? AppDelegate)?.window?.rootViewController 
    } 
    if let vc = baseView?.presentedViewController { 
     return UIApplication.topViewController(base: vc) 
    } else { 
     return baseView; 
    } 
} 
} 

あなたは上部のナビゲーションビューにプッシュしたい場合は、その中に現在のビュー、その後からNavController提示トップを探して、それにプッシュするtopViewController方法を変更します。

+0

RJEのお返事ありがとうございます。あなたのアプローチは優雅に見えますが、唯一の問題はUIStoryboard .... instantiateVCを使用してボタンクラス内からビューコントローラまたはストーリーボードを参照できないことです。 –

関連する問題