-1

私には 2 つの見方があります。1 つのビューは登録ビューです。ユーザーが登録 UIBarButtonItem をクリックすると、そのビューに移動します。そのビューには、「戻る」という別の UIBarbuttonitem があります。ユーザーがそのボタンをクリックすると、登録ボタンがあるメイン ビューに移動します。次に、ユーザーが [サインアップ] ボタンをもう一度クリックすると、このエラーがスローされます。

2012-09-26 19:22:53.256 Users[14763:c07] -[Registration signUp:]: unrecognized selector sent to instance 0x747e5b0
2012-09-26 19:22:53.257 Users[14763:c07] *** Terminating app due to uncaught exception

UsersViewController.h

@interface UsersViewController : UIViewController
@property (nonatomic, strong) Registration *registration;

UsersViewController.m
Signup event:
    self.registration = [[Registration alloc]initWithNibName:@"Registration" bundle:nil];
    [self.view addSubview:self.registration.view];

Registration.h
    @interface Registration : UIViewController
    @property (nonatomic, strong) Registration *mainView; 

Registration.m
Back button Event
   self.mainView = [[Registration alloc]initWithNibName:@"UsersViewController" bundle:nil];     

[self.view addSubview:self.mainView.view]

4

1 に答える 1

-1

バーボタンを押すと、処理コードは次のようになります。

- (IBAction)showRegistration:(id)sender
{
    Registration *registrationViewController = [[Registration alloc] init];
    [self.navigationController pushViewController:registrationViewController];
}

メインのViewControllerがNavigationControllerに埋め込まれていることを確認してください。そうすれば、OSが残りの作業を代行してくれます。登録ビューコントローラには、ユーザーを前のビューに戻すための戻るボタンがあります。addSubviewは、このようなビュー間を移動するために一般的に使用される方法ではありません。あなたも使うことができます

[self presentViewController:registrationViewController animated:YES];

または、ストーリーボードを使用している場合は、

[self performSegueWithIdentifier:@"go to registration view"];

これを行う方法はたくさんありますが、addSubviewはあなたが探しているドロイドではありません。

また、提示されたViewControllerにそのプレゼンターを指すプロパティを与えたくありません。Cocoaの委任デザインパターンを読む必要があります。登録ビューコントローラにデリゲートプロパティを指定し、MainViewControllerを登録ビューコントローラのデリゲートとして提示時に割り当ててから、MainViewControllerにデリゲートコールバックメソッドを実装して、登録ビュー時に必要な作業を実行する必要があります。コントローラが却下されました。

于 2012-09-27T01:46:06.247 に答える