Кнопка Назад показывает половину на пользовательской панели навигации iPad - PullRequest
0 голосов
/ 14 ноября 2011

Кнопка «Назад» на пользовательской панели навигации показывает половину на iPad, она правильно отображается на iPhone.Приложение поддерживает только портретный режим.

enter image description here

исходный код,

  UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
if (isPad) {
    backButton.frame = CGRectMake(0, 0, 120, 70);
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed-iPad_120X70.png"] forState:UIControlStateNormal];
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed-iPad_120X70.png"] forState:UIControlStateHighlighted];
}else{
    backButton.frame = CGRectMake(0, 0, 60, 35);
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed.png"] forState:UIControlStateNormal];
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed.png"] forState:UIControlStateHighlighted];
}

[backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = buttonItem;
[buttonItem release]; buttonItem = nil;

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2011

Я решил проблему, разместив детали здесь, чтобы они могли быть полезны другим

1] created a UIButton, with custom image.
2] created a UIView, which will fit properly on UINavigationbar.
3] added UIButton on UIView.
4] created UIBarButtonItem with custom view.

вот код,

    if (isPad) {
        UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 200, 200)];
        UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
        backButton.frame = CGRectMake(0, 90, 120, 70);
        [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed-iPad_120X70.png"] forState:UIControlStateNormal];
        [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed-iPad_120X70.png"] forState:UIControlStateHighlighted];
        [backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
        [customView addSubview:backButton];

        UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:customView];
        self.navigationItem.leftBarButtonItem = buttonItem;
        [customView release];  customView = nil;
        [buttonItem release]; buttonItem = nil;
    }else{
        UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
        backButton.frame = CGRectMake(0, 0, 60, 35);
        [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed.png"] forState:UIControlStateNormal];
        [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed.png"] forState:UIControlStateHighlighted];
        [backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
        self.navigationItem.leftBarButtonItem = buttonItem;
        [buttonItem release]; 
        buttonItem = nil;
    }
0 голосов
/ 15 ноября 2011

Аааа, я только что понял, что вы пытаетесь вставить элемент управления UIButton в UIBarButtonItem через инициализатор, который ожидает базовый UIView, а не элемент управления.

Не делай этого!

Почему бы просто не создать элемент панели кнопок с помощью:

UIBarButtonItem * buttonItem = 
    [[UIBarButtonItem alloc] initWithTitle: @"Back" 
                                     style: UIBarButtonItemStyleDone 
                                    target: self 
                                    action: @selector(backButtonPressed:);

И пусть О.С. обрабатывать соответствующее выделение (если оно должно быть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...