昨日私はthis questionを投稿しました。私の問題の構造については、すべてのコードがそこにあります。Objective-c UITableViewサブクラスの中から繋ぐ方法
問題...この時間は
私はOBJ-Cに他の言語から来ているとOOP構造のいくつかは、私は少しうんざり作っている(私はすべての可能な機能を梱包好きではありませんいくつかのように単一のUIViewController
になります)。私はもともとフルページUITableViewController
に埋め込みのNavigationController
を作成しようとしていましたが、このプロジェクトの使用例ではデフォルトのナビゲーションバーを使用できませんでした。だから、私は自分のnavbarに入れて、より簡単なオプションの代わりにUITableView
(ほとんどフルスクリーンになるようにサイズ変更)を使用しなければならなかった...(これはすべてこれを使って解決できるとは思っていたが、 )
代わりに私は自分自身のカスタムTasksTableView.h
サブクラスを含むプロパティを持つUIViewController
という普通のレギュラーを持っています。上に掲示したリンクに見られるように、サブクラスはUITableView
です。
実際の問題はそうするすべての関数は、UIViewController
クラスから来る必要のようですので、私はセグエまたはこのUITableView
の内側からのビューを変更するように見えることができないということです。
私はUITableView
サブクラスのdidSelectRowAtIndexPath
方法で手動セグエを呼び出す
しようとしています。 performSegueWithIdentifier
が、それはそう罰金のthatsていないこのクラスには存在しないことを私に言って明らかにエラーが発生し
[self performSegueWithIdentifier:@"profile" sender:sender];
。明らかにそれは私のUITableView
サブクラスをインスタンス化したUIViewController
クラスに属しています...
実際には、自分のテーブルビューサブクラス自体のプロパティをレンダリングして保持し、ビューをスタックにプッシュしようとしています。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *target = [storyboard instantiateViewControllerWithIdentifier:@"SingleTaskViewController"];
AllTasksViewController *allTasksView = [[AllTasksViewController alloc] init];
if(target) {
[target setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[allTasksView presentViewController:target animated:YES completion:nil];
}
}
これは含まれており、このUITableView
をインスタンス化図であるので、それが階層構造であることが必要にもかかわらず...私にエラーWarning: Attempt to present <SingleTaskViewController: 0x7fa15d5359f0> on <AllTasksViewController: 0x7fa15d5363c0> whose view is not in the window hierarchy!
を与えます。
UITableView
サブクラスを保持しているUIViewController
から手動でdidSelectRowAtIndexPath
を呼び出してみましたが、やはり同じ種類のものでした。しかし、私はインデックスを渡さなければならなかったので、実際に何が選択されたかを教えてくれるテーブルの代わりにそれを選んでいます。
私は本当にUIViewController
から別々UITableView
サブクラスを維持し、ビューコントローラへのデリゲートメソッドとプロトコルを持っていないしたい
を欲しいもの。私はロジックを分離した状態に保つことを好むだろう。私が必要とするのは、問題のシングルタスクビューへの切り替えや移行を行い、押されたことについて何らかのデータを送信する方法です。
あなたはIBでセグエを設定している場合にのみperformSegueWithIdentifierを呼び出す必要があります!そして、この呼び出しで自己のUIViewControllerを指し、しかし、そのサブビューのどれも! –
私はそれを試みました、それは 'performSegueWithIdentifier'メソッドが存在しないと言います! – GoreDefex
あなたはUIViewControllerのサブクラスであるクラスでのみ呼び出すことができます –