2016-08-24 12 views
2

1つのベースビューコントローラからすべて継承する5つのView Controllerがあります。私のbaseVCには、活動の開始や停止、インターネット活動の確認などの共有機能が含まれています。 VCは(絵コンテから)BaseViewControllerから継承するTableViewControllerとUIViewControllerを作成します。

class BaseVC: UIViewController { } 
class NewsFeedVC: BaseViewController { } 
class MakePostVC: BaseViewController { } 
class NotificationVC: BaseViewController { } 
class MoreVC: BaseViewController { } 
class CollectionVC: BaseViewController { } 

マイNewsFeedVCとNotificaitionVC

以下のように見えるのtableViewで通常のUIViewControllerによって構築されている。内だから、このすべての作品をドラッグ。しかし、私はこれらの2つのVCをストーリーボードからviewControllerにドラッグされたtableViewの代わりにUITableViewControllerに変更することを考えています。その理由は、tableViewがUIViewcontrollerの内部で構築されていた場合、テーブルビューがジャンプするようにリフレッシュするためにいくつかのバグがあったからです。

ただし、NewsFeedVCとNotificationVCがUItableViewControllerから継承している場合は、これ以上BaseVC内の関数を使用することはできません。私が望むものを達成するためにこれをどのように構造化できますか?あなたはNewsFeedVCクラスがBaseVCこの追加継承して、あなたは、デリゲート

を使用してそれらを呼び出したい関数を使用してBaseViewController

class NewsFeedVC: UITableViewController { } 
class MakePostVC: UITableViewController { } 
+0

テーブルビューがジャンプするとはどういう意味ですか? – hasan83

答えて

4

セットアッププロトコル: - で

prtotocol baseVCDelegate{ 

    func activityIndic() 
    func checkInternetConnect() 
} 

    class BaseVC : UIViewController{ 
    .... 
    var delegate : baseVCDelegate! 
    .... 
    .. 
    func activityIndic(){ 
    .. 
    .. 
    } 
    .. 

    func checkInternetConnect(){ 
    .. 
    .. 
    } 
    } 

をごNewsFeedVC型の変数を宣言するBaseVC

var baseVCHandler : BaseVC = BaseVC() 

次に、あなたのプロトコルが準拠する任意の機能にアクセスviewDidLoad()

baseVCHandler.delegate = self 

に自己へのデリゲートを割り当てます!

PS: - https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problemを利用すると、迅速にクラスの複数の継承を鈍らせるような理由が理解できない場合は、基本をクリアします。

1

UIViewControllerためextensionを作成し、拡張Xcodeの[ファイル]メニューを作成するためにextension

extension UIViewController{ 

    func showActivityIndicator() 
    { 
     // write your code to show Activity Indicator 
    } 
    func hideActivityIndicator() 
    { 
     // write your code to hide Activity Indicator 
    } 

    func checkInternetConnection() -> Bool 
    { 
     return true // write your code to check connection 
    } 
} 

にこれらすべての一般的な方法を置く - >新規 - >ファイル - >とスウィフトファイルを選択して、あなたの願いとしてそれに名前を付けます。上記のようなクラスの拡張を作成します。

後で、私はあなたの構造にまで不足しているのではなく、バグをリフレッシュするためにプルを修正することをお勧めself.hideActivityIndicator()

0

のようなこれらのメソッドを呼び出すことができます。私はUIViewControllerでそれをUITableViewで問題なくリフレッシュしようとしています。

refreshControl = [[UIRefreshControl alloc] init]; 
[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged]; 
[refreshControl setTintColor:[self.stylingDetails themeColor]]; 
[oppTableView addSubview:refreshControl]; 

- (void)refresh:(UIRefreshControl *)refresh { 
} 

注:

のUITableViewControllerはのUIViewControllerが持っている機能を失います。 コントローラの 機能によって、解決できない新しい問題が発生する可能性があります。

+0

これは理想的です!しかし、リフレッシュするためにこの「ジャンプ」問題が発生しましたか? http://stackoverflow.com/questions/31011734/why-uirefreshcontrol-jumpingを見てください。かなりゆっくりとテーブルビューを元に戻すと、テーブルビューが20〜30ポイント下がります – user172902

関連する問題