0

iOs7 で正しく動作するようにアプリを更新しようとしています。

iOS 5 および 6 では、これは完全に機能しました。

if ([segue.identifier isEqualToString:@"popover"])
{
    FavoritesViewController *vc = segue.destinationViewController;
    CGFloat width = 200.0;
    CGRect rect = [vc.tableView rectForSection:[vc.tableView numberOfSections] - 1];
    CGFloat height = CGRectGetMaxY(rect);

    if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])
    {  
        _filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];
        [_filterPopoverController setPopoverContentSize:CGSizeMake(width, height)];  
        [_filterPopoverController setDelegate:self];
    }
}
}

これを使用して、すでに画面に表示されているかどうかを確認します

- (IBAction)touchedFilterButton:(UIBarButtonItem *)sender 
{
    if (_filterPopoverController == nil)
    {
        [self performSegueWithIdentifier:@"popover" sender:self];
    }
    else
    {
        [_filterPopoverController dismissPopoverAnimated:YES];
        _filterPopoverController = nil;
    }
}

この行を削除すると

    _filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];

動作しますが、幅/高さを設定できず、画面に表示されているかどうかを確認できません。

4

1 に答える 1

1

問題は、iOS7がそれほど「寛容」ではないことでした

電話する

    _filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];

CGFloat width = 200.0;
CGRect rect = [vc.tableView rectForSection:[vc.tableView numberOfSections] - 1];
CGFloat height = CGRectGetMaxY(rect);

高さはまだ「表示」されていないため、常に 0.000 であるため、他のビュー コントローラーを呼び出して幅を設定した後にセグエを置き換える必要がありました。すでにサブクラスであるため、サブクラスの部分を削除しました

FavoritesViewController *vc = segue.destinationViewController;
_filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];

CGFloat width = 200.0;
CGRect rect = [vc.tableView rectForSection:[vc.tableView numberOfSections] - 1];
CGFloat height = CGRectGetMaxY(rect);

[_filterPopoverController setPopoverContentSize:CGSizeMake(width, height)];
[_filterPopoverController setDelegate:self];
于 2013-10-11T13:28:59.977 に答える