Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Изменение MKMapType с использованием модального перехода с частичным скручиванием

Автор вопроса: user1612877Ответов: 2

Я пишу приложение, в котором отображается карта. Теперь я хочу дать пользователю возможность изменить MKMapType со стандартного на гибридный.

Для этого я создал переход к другому контроллеру представления, содержащему переключатель для установки типа карты. Переход модальный с использованием частичного завитка. Чтобы получить доступ к значению переключателя, я ввел BOOL, который называется fotoMode в AppDelegate. Если для этой переменной установлено значение YES (и если переключатель установлен в положение ON), я бы хотел перерисовать карту.

- (IBAction) FotoModusSwitchChanged:(UISwitch *)sender
{
 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if(sender.isOn)
 {
    appDelegate.fotoMode=YES;
 }
 else
 {
    appDelegate.fotoMode=NO;
 }
}

Я включил следующие строки кода в VieWillAppear, ViewDidAppear, ViewDidLoad, ViewWillLayoutSubviews контроллера представления для представления карты, но это не работает:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.fotoMode) {
    [self.MapOutlet setMapType:MKMapTypeHybrid];
}
else
{
    [self.MapOutlet setMapType:MKMapTypeStandard];
}

Любая идея, что я делаю неправильно? Спасибо.

PS: установка MKMapType вручную на Hybrid или Standard работает...

  • Поставьте точку останова на if (appDelegate.fotoMode) и, когда отладчик остановится на этом, проверьте значение appDelegate.fotoMode. Также проверьте, является ли self.MapOutlet nil в этот момент. 05.10.2012
  • Я сделал это, и MapOutlet не равен нулю. user1612877 06.10.2012

iosmodalviewcontrollermkmapviewuistoryboardsegue

Ответы

Ответ 1 · lionserdar

ваш код кажется мне правильным, но я думаю, что у вас проблемы с объявлением "fotoMode".

Убедитесь, что в вашем файле Appdelegate.h вы определяете свой BOOL

@property(nonatomic,assign) BOOL fotoMode;

если вы не объявите свой BOOL правильно, вы не сможете установить и получить правильное значение.

Надежда помогает...

Ответ 2 · Charlie Seligman

ViewWill/DidAppear не вызывается при закрытии частичного завитка (поскольку старый вид никогда полностью не исчезал). Используйте делегирование для вызова при закрытии страницы настроек.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы