0

UIBarButtonItemSegue を使用して表示し、クリックしたポップオーバー ビューを閉じようとしています。

ビュー以外に固定されていない一般的なセグエを作成し、名前を付けました

Interface Builder で UIBarButtonItem を次のように固定しました。

- (IBAction)clickedSettings:(id)sender {

    if(self.popSegue != nil) {
        [self.popSegue.popoverController dismissPopoverAnimated:YES];
    } else {
        //Current says only a button may
        [self performSegueWithIdentifier:@"Settings" sender:sender];
    }
}

しかし、ボタンをクリックしてセグエを表示するたびに、エラーが発生します。

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'UIStoryboardPopoverSegue は、バー ボタン アイテムまたはビューから提示する必要があります。

それは私にさえ当たらない-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

スタックに関する次の質問を読みました。

  1. iOS:ポップオーバーを閉じる方法
  2. UIBarButtonItem + ポップオーバー セグエは複数のポップオーバーを作成します

しかし、私はまだ同じエラーが発生します。私の人生では、何がうまくいかないのか理解できません

4

2 に答える 2

3

複数の StackOverflow スレッドを通過してすべてのビットを取得したため、これを信用することはできませんが、次のように動作するようになりました。

@interface MyViewController ()
- (IBAction) toggleSettingsInPopover: (id) sender;
@property (nonatomic, strong) UIStoryboardPopoverSegue *settingsPopoverSegue;
@end

@implementation MyViewController
@synthesize settingsPopoverSegue = _settingsPopoverSegue;

- (IBAction) toggleSettingsInPopover: (id) sender {
    if( [self.settingsPopoverSegue.popoverController isPopoverVisible] ) {
        [self.settingsPopoverSegue.popoverController dismissPopoverAnimated: YES];
        self.settingsPopoverSegue = nil;
    } else {
        [self performSegueWithIdentifier: @"Settings" sender: sender];
    }
}

- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender {
    if( [segue.identifier isEqualToString: @"Settings"] ) {
        if( [segue isKindOfClass: [UIStoryboardPopoverSegue class]] )
            self.settingsPopoverSegue = (UIStoryboardPopoverSegue *) segue;
        MySettingsViewController *msvc = segue.destinationViewController;
        msvc.delegate = self;
    }
}
@end

ストーリーボードで、設定バーのボタン項目からコントロールドラッグしてアクションMyViewControllerに接続しました。次に、セグエを作成するための設定のビューtoggleSettingsInPopoverにコントロールドラッグし、タイプをに設定し、識別子をに設定し、方向を上下に設定します (ツールバーは画面の下部にあり、ボタンは画面の下部にあります)。右端)から、アクションに接続したバー ボタン アイテムにドラッグします。MyViewControllerpopoverSettingsAnchor

于 2012-02-15T04:26:35.217 に答える
2

アンカー フィールドをセグエ属性インスペクタから UIBarButton に Ctrl キーを押しながらドラッグして、セグエを UIBarButton に固定する必要があります。

反対の方法でボタンからウィンドウに Ctrl キーを押しながらドラッグすると、ポップオーバーウィンドウから動作を制御できなくなります。

(重要な部分は、LavaSlider の Reply の最後の文にもあります)

于 2012-07-06T09:12:45.450 に答える