1

「MainView」という名前のものUIViewControllerがあり、UITableView「tblLists」という名前のものが-「customCellList」を
tblLists生成していcustomCellます。

私の質問は、クラスMainViewで's instance(self)を取得できるかどうかですcustomCellList

スーパービューのもので試してみましたが、取得できませんでしMainViewた。プロトコルなしでこれを達成したい。

だからこれであなたの助けが必要です。

4

5 に答える 5

7

レスポンダー チェーンを使用して、View Controller にアクセスできます。customCell クラスが UITableViewCell サブクラスであると仮定すると、次のメソッドがその役割を果たします。

@implementation customCell

- (UIViewController *)getViewController
{
   id vc = [self nextResponder];
   while(![vc isKindOfClass:[UIViewController class]] && vc!=nil)
   {
       vc = [vc nextResponder];
   }

   return vc;
}

@end

上記のコードは、Sensible TableViewフレームワークの厚意によるものです。

于 2013-03-23T22:39:26.983 に答える
2

あなたが求めていることは良い考えではありません、あなたは別の方法を見つけるべきです。それはMCVパターンを壊します。ちなみに、ARCを使用してiOS> = 5をターゲットにしているメモリの問題が心配な場合は、テーブルビュー自体への弱参照を作成し、ビューコントローラをそのデリゲートまたはデータソースプロパティとして取得できます(もちろん、VCが1つの場合)彼ら)。または、VC自体への弱参照を作成できます。
コメントで指摘されているように、良い考えではありません。別の方法を見つけてください。セルの値を更新する必要がある場合は、テーブルビューデータを再読み込みする方法がたくさんあります。モデルからVCでKVO、通知、委任などを使用することにより、セルに奇妙な参照を含めることなく、テーブルビューへのリロードをトリガーできます。
お役に立てれば。

于 2013-03-22T06:59:58.637 に答える
1

めったに MVC を壊したい場合のために..これは、ウィンドウの rootVC としてナビゲーション コントローラーを使用していることを前提としています。Swift 2 用に更新

func visibleVC() -> UIViewController? {
        if let navVC: UINavigationController = UIApplication.sharedApplication().keyWindow?.rootViewController as? UINavigationController {
            if let vc: UIViewController = navVC.visibleViewController as? MyViewControllerClass {
                return vc
            }
        }
        return nil
    }
于 2015-12-18T13:17:59.820 に答える
0

また、rootViewController にアクセスすることもできます:

UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
于 2014-07-01T13:55:47.920 に答える