Почему моя кнопка «Готово» исчезает в простом приложении FlipsideViewController? - PullRequest
0 голосов
/ 24 июня 2011

У меня есть простое приложение с двумя экранами, которое я построил год назад, используя шаблон проекта «утилита» в Xcode 3. Это создает делегат приложения, основной вид и вид с обратной стороны.У перевернутого вида вверху есть панель UINavigationBar с левой кнопкой «Готово».

Я только что окончательно обновился до Xcode 4 с SDK 4.3, и когда я сейчас создаю приложение, кнопка «Готово» не появляетсялибо в симуляторе, либо на моем устройстве.Но если я создаю новый проект, используя шаблон «утилиты» Xcode 4, кнопка «Готово» отображается и работает правильно.К сожалению, при обновлении были удалены мои файлы SDK 4.2, поэтому я не могу пересобрать SDK 4.2 и проверить, в чем ли это разница.

Я заметил, что новый шаблон по-разному настраивает основной вид, используя свойство rootViewController.окна, а не добавление основного вида в качестве подпредставления окна ( дополнительная информация здесь ).Я попытался скопировать этот код в делегат своего приложения вместо кода addSubview, но представление вообще не отображалось, поэтому я, должно быть, что-то упустил ... но я все равно скоро поддержу совместимость с iOS 3.0.Я не могу найти никаких других отличий между новым шаблоном «утилиты» и моим собственным проектом на основе старого шаблона.

Я также пытался переместить кнопку «Готово» из leftButtonItem в rightButtonItem в Interface Builder, но этовсе еще не появляется.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Я пробовал это на всех версиях симулятора iPhone, которые доступны в моей установке XCode.При сборке с SDK 4.3 кнопка «Готово» не отображается в симуляторах iOS 4.0-4.3 ... но она появляется в симуляторе iOS 5 (бета).

Затем я подключил IBOutlets к навигациипанель, элемент навигации и кнопка «Готово» в Интерфейсном Разработчике, чтобы я мог проверить их по своему коду.Когда я проверил их сразу после представления перевернутого вида с помощью presentModalViewController, я обнаружил, что кнопка «Готово» (UIBarButtonItem) существует, но leftBarButtonItem элемента навигации имеет значение null.Если я назначу кнопку «Готово» этому свойству, оно появится.Так что каким-то образом эта кнопка отключается от свойства leftBarButtonItem, когда инициализируется или отображается представление обратной стороны.

ВОЗМОЖНОЕ РЕШЕНИЕ:

В Интерфейсном Разработчике, если я просматриваю выходы для Элемента навигации, я вижучто кнопка Done связана с ее свойством leftBarButtonItem, но если я просматриваю выходы для кнопки Done, у нее нет ссылок.Если я свяжу его с элементом навигации, появится кнопка!При такой настройке кнопка «Готово» показывает элемент навигации в качестве розетки, а элемент навигации дважды показывает кнопку «Готово» в качестве розетки.Это не нужно в новом шаблоне приложения утилиты, поэтому я не знаю, зачем это нужно здесь.Кажется, это работает, но если у кого-то есть объяснение или лучшее решение, я зарезервирую для этого свои очки ответа.

1 Ответ

1 голос
/ 03 января 2012

У меня была похожая проблема с пользовательскими BarButtonItem, хотя я не совсем уверен, что это та же самая проблема, они довольно близки. Итак, я выкладываю ответ на тот случай, если кто-то наткнется на ваш вопрос, как я :))

Проблема: Добавьте пользовательский UIBarButtonItem со следующим кодом на панель навигации с пользовательским фоном. Когда вы нажимаете другой контроллер представления и возвращаетесь, пользовательский UIBarButtonItem не появляется, но вы можете продолжать касаться того места, где он был, и вызывать его целевое действие. Проблема возникает только на симуляторе iOS4.3, и все прекрасно работает без решения на симуляторе iOS5. (Все работает нормально и на устройствах iOS5, не могу попробовать код на устройстве iOS4.3)

    UIButton* doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [doneButton setBackgroundImage:[UIImage imageNamed:@"barbutton.png"] forState:UIControlStateNormal];
    [doneButton setTitle:@"Done" forState:UIControlStateNormal];
    doneButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0];
    [doneButton.layer setCornerRadius:5.0];
    [doneButton.layer setMasksToBounds:YES];
    [doneButton.layer setBorderWidth:0.2];
    [doneButton.layer setBorderColor:[[UIColor blackColor] CGColor]];
    doneButton.frame = CGRectMake(0.0, 0.0, 70.0, 30.0);
    [doneButton addTarget:self action:@selector(doneButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    doneBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myLocationButton];
    self.navigationItem.leftBarButtonItem = doneBarButtonItem;

Решение: Добавление следующей строки кода, связанной с установкой z-индекса слоя UIButton, решило проблему для меня.

[doneButton.layer setZPosition:2];

Примечание Вам необходимо включить <QuartzCore/QuartzCore.h>, чтобы использовать свойства / методы, относящиеся к слою

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