2012-02-18 8 views
0

UITableViewでどの行が選択されているかに応じて、UISplitViewにUIViewControllerを作成するプログラムがあります。たとえば、ユーザーが 'settings'という行をクリックすると、プログラムはsettingsTableVC(UISplitViewControllerの左側ペインに表示される)というビューコントローラと、右側のペインに表示されるdetailsDetailVCという詳細ビューコントローラを作成します。作成後にViewControllerのタイプを変更するにはどうすればよいですか?

論理はうまくいきますが、最初のtableViewの各行に対して、それぞれのViewControllerとそのパブリックプロパティを作成して設定するためのコードがたくさんあり、より単純な方法で2つの一般的なViewControllerを開き、メソッドの正しい型にキャストします。そうすれば、パブリックプロパティを総称的に定義することができます(masterViewControllerとtableViewControllerへのポインタはすべて基本的に同じプロパティであるため)

E.G.

UIViewController *leftController = nil; 
UIViewController *rightController = nil;' 

その後、didSelectRowAtIndexPathに:

leftController = [[SettingTableViewController alloc]init]; 
rightController = [[SettingsDetailViewController alloc]init]; 

leftController.masterVC = self; 
rightController.tableVC = leftController; 

しかし、コンパイラは警告している - 'のUIViewControllerプロパティmasterVCを宣言していません'。

実行時にこれらのViewControllerのクラスを変更するにはどうすればよいですか?

答えて

0

あなたは、次のいずれかを行うことができます:あなたは正しくオブジェクトを作成している

SettingsTableViewController *leftControllerCasted = (SettingsTableViewController *)leftController; 
SettingsDetailViewController *rightControllerCasted = (SettingsDetailViewController *)rightController; 
leftControllerCasted.masterVC = self; 
rightControllerCasted.tableVC = leftController; // Doesn't matter if you assign it to leftController or leftControllerCasted 

または

((SettingsTableViewController *)leftController).masterVC = self; 
((SettingsDetailViewController *)rightController).tableVC = leftController; 

を、しかし、あなたがそれらをコンパイラが知らないUIViewControllerポインタオブジェクトタイプを割り当てるようあなたのオブジェクトはあなたのカスタムクラスです。

+0

完璧な、私は見て見ることができませんでした、多くのありがとう。 – Skybird

+0

うれしい私は助けることができる:) – jrtc27

関連する問題