0

(iPhoneで)ポップオーバーを表示するために使用するカスタムUIViewがあります。ポップオーバーには、ViewController のクラス (UIView のクラスではなく、UIView を表示しているビュー) からメソッドを呼び出す必要があるいくつかの UIButtons があります。

これを正しく設定するにはどうすればよいですか?

カスタムUIViewクラスにあるUIViewボタンコード:

    UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [logoutButton setTitle:@"Logout" forState:UIControlStateNormal];
    [logoutButton setFrame:CGRectMake(0, 0, content.frame.size.width, 44)];
    [logoutButton addTarget:self.superview.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside];
    [logoutButton setBackgroundImage:redImage forState:UIControlStateNormal];
    [logoutButton setBackgroundImage:redImageHighlight forState:UIControlStateHighlighted];
    [logoutButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [content addSubview:logoutButton];
4

3 に答える 3

2

これを行う最善の方法は、UIView サブクラスでデリゲート パターンを使用して、ログアウト ボタンが押されたときに所有者に通知することです。ビューコントローラーでビューのインスタンスを作成するときは、デリゲートを自分自身に設定します。

http://enroyed.com/ios/delegation-pattern-in-objective-c-and-writing-custom-delegates/で「カスタム デリゲートの作成」をチェックアウトします。

上記のコードで試みた方法では、スーパービューに接続された ViewController にアクセスできません。

または、通知を投稿することもできます。たとえば、ログアウトを実行する必要があるというアプリ全体のメッセージを送信します。これを行う方法については、NSNotificationCenter を確認してください。

何かのようなもの:

[[NSNotificationCenter defaultCenter] postNotificationName:kShouldLogOutNotification object:nil];

編集:ユースケースでデリゲートを使用することは間違いありません。

于 2012-09-13T17:02:08.617 に答える
0

Ok so I do believe that creating a custom delegate is the PROPER way to handle this problem. However, I did discover that this method works correctly (not sure if it is "proper" though)

[logoutButton addTarget:self.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside];

This seems to tell the button to use the class (ViewController) of it's superview (UIView). Again, not sure if this is the proper/correct way to call a method from the main view controller, but it works without a problem so it seems useable.

于 2012-09-13T17:10:13.943 に答える
0

この種のことは、一般的に、UIKitで頻繁に使用されるデザインパターンであるデリゲートを使用して実行されます参照:iOSデリゲートの目的は何ですか?

于 2012-09-13T17:06:44.153 に答える