私は、2 つのコントローラーから 1 つのビューに移動できるアプリケーションを持っています。どのコントローラーから来たかを確認して、コントローラーに応じてさまざまなことを行うことができるかどうか疑問に思っていました。
前もって感謝します
私は、2 つのコントローラーから 1 つのビューに移動できるアプリケーションを持っています。どのコントローラーから来たかを確認して、コントローラーに応じてさまざまなことを行うことができるかどうか疑問に思っていました。
前もって感謝します
新しいビューをプッシュすると、UINavigation スタックにアクセスして、前のビューの前にあるビューを確認できます。
Class aClass = [[[self.navigationController viewControllers] objectAtIndex:self.navigationController.viewControllers.count - 2] class];
if (aClass == [UIViewControllerA class])
//Do something
else if (aClass == [UIVIewControllerB class])
//Do something else
または、プッシュ先の単一のビュー用のカスタム init メソッドを作成して、それがどのビューから来たかを示す変数を渡すことができるようにします (申し訳ありませんが、非常に冗長です)。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil isFromViewA:(bool)isFromViewA
カスタムの初期化メソッドを作成し、init 中に何かを渡す必要があるかもしれません。
やり方は色々あるでしょう。これは方法の1つです
yourView.h で
-(id)initWithType:(int)viewControllerType;
また、int viewType; と仮定して int 変数を作成します。yourView.h で
あなたのView.mファイルで
-(id)initWithType:(int)viewControllerType{
self = [super initWithFrame:CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>)];
if (self) {
//custom init here
viewType = viewControllerType;
}
最初のviewControllerを1に、2番目を2に定義できます。
したがって、最初のviewControllerでそのyourViewを初期化するとき。コードは次のようになります
yourView *newView = [yourView alloc] initWithType:1];
したがって、そのyourViewを2番目のviewControllerで初期化するとき。コードは次のようになります
yourView *newView = [yourView alloc] initWithType:2];
今、物事はより簡単になります
if(viewType==1){
//do something particular for first view controller
}
if(viewType==2){
//do something particular for second view controller
}
うまくいかなかった場合。コードを共有してください...ありがとう
私はそれを自分で解決しました。私は nsobject を作成し、コントローラーを離れるときにそれを配列に追加します。存在する場合はそれを更新し、オブジェクトの要素の値が元のコントローラーの名前と等しい場合は次のコントローラーで更新します。それは余分なことをします