0

ある種の行動を適切に行う方法に問題があります。

以下の画像はUIViewControllerを示していますが、ビューの2番目の部分はカスタムUIView(プロファイル写真、名前、および[ビューの表示]ボタンが付いたもの)です。サブクラス化されたUIViewは、次のコードを使用して割り当てられます。

    profileView = [[GPProfileView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 70)];
    profileView.myTripGradientColor = YES;
    [self.view addSubview:profileView];

もちろん、問題は、UIViewのボタンがビューを表示できないことです。これは、別のViewControllerをウィンドウにプッシュできるのはUIViewControllerだけだからです(正しいですか?)。

UIViewはアプリのいくつかの場所で使用されており、簡単に追加でき、アプリケーション全体で同じ動作をする必要があります。

これは、ボタンを追加するまではうまく機能しました。これは間違っていると思い始めており、それを行うためのより良い方法が必要です(UIViewを別のものに変更する可能性がありますか?)。

私は私が呼ぶことができるべきだと思っていました:

self.superview

そして、どういうわけかViewControllerを取得して、別のViewControllerをビュー階層にプッシュできるようにしますが、違います。

これを正しく行う方法に関する提案やヒントはありますか?

更新:ボタンから別のUIViewControllerをプッシュする方法がわかりません。

UIViewのボタンを押すとき、このメソッドで何をすべきですか?

- (void) showViewButtonTouched:(UIButton*)sender {
GPProfileSocialFriendsViewController *friendsSettings = [[GPProfileSocialFriendsViewController alloc] init];

}

GPProfileSocialFriendsViewControllerをプッシュするにはどうすればよいですか?

UIViewController内のUIViewの画像。UIViewにはボタンがあります

4

3 に答える 3

1

UIViewControllerのGPProfileViewで弱参照を作成できると思います。このような:

@property (weak, nonatomic) UIViewController *rootController;

GPProfileViewを作成するときに、rootController-propertyを割り当てます。

profileView = [[GPProfileView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 70)];
profileView.myTripGradientColor = YES;
profileView.rootController = self;   // if view created in view controller
[self.view addSubview:profileView];

およびボタンセレクターの実装:

self.rootController push... // or pop

これは正しくないかもしれませんが、試すことができます

于 2013-01-08T16:11:37.287 に答える
1

あなたの- (void) showViewButtonTouched:(UIButton*)senderメソッドはあなたのコントローラーにあるべきであり、おそらくもっと良い名前が付けられているでしょう、- (void) showView:(UIButton*)senderあるいは- (void) showProfile:(UIButton*)senderそれはそれが何をするのかを明確に示しています(あなたがそこにたどり着いた方法ではありません)。

ある状態から別の状態への遷移を管理するのは、ビューの責任ではありません。self.navigationControllerメソッドをコントローラーに移動すると、問題はなくなります(次のようなナビゲーションコントローラーがない場合は、簡単にアクセスしたり、直接プッシュしたりできます。

[self presentViewController:vcThatNeedsToBePushed animated:YES completion:nil];

于 2013-01-08T16:31:26.563 に答える
0

ボタンが押されたときに、ViewControllerに次のViewControllerをプッシュさせることができます。ビューコントローラはボタンにターゲット/アクションを追加できるため、ビューコントローラのアクションメソッドはタッチアップインサイドイベントで呼び出されます。

于 2013-01-08T16:55:25.053 に答える