2016-03-24 1 views
0

Итак, я реализовал местоположение в своем приложении.locationManager didUpdateLocation, изменение UIElements в другом классе swift

Я создал класс с обработкой местоположения, я использую locationManager didUpdateLocations, чтобы узнать, когда будет найдено местоположение. Что мне нужно сделать, это изменить изображение на кнопке и остановить ActivityIndicator в другом классе (viewController).

Я попытался получить экземпляр viewController для использования в моем locationClass, но он провалился и вернул нуль.

У кого-нибудь есть хороший способ достичь этого? Я бы подумал, что мне нужно получить экземпляр моего viewController, но я этого не сделал. BTW, место работы работает!

Редактировать: Благодаря naomimichiko мне удалось это сделать. Я добавил ответ, объясняющий, как это сделать.

ответ

2

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

+0

Я собираюсь попробовать это сейчас. Откроется позже. – Starlord

+0

Работал как шарм! Я обновлю свой вопрос, чтобы другие знали, как это сделать – Starlord

0

Вы можете подумать о delegate или NSNotification, чтобы сообщать другим пользователям, когда их обновили.

1

Благодаря naomimichiko я составил протокол, который обрабатывает то, что мне нужно! Вот как я это сделал:

Сначала я создал файл с именем: 'protocols.swift'. В этом я объявил мой протокол:

@objc protocol LocDelegate{ 
optional func locationFound() 
} 

В классе расположения ведьмы обрабатывает местоположение вещей я добавил:

var delegateLoc: LocDelegate? 

я имею Func locationManager didUpdateLocaton В классе расположения и там я сделал это:

delegateLoc?.locationFound!() 

Это будет «запускать» функцию, если есть класс, слушающий это.

В моей ViewController где мне нужно обновить этикетки и дерьмо я добавил протокол к классу так:

class ViewController: UIViewController, LocDelegate 

Тогда в viewDidLoad я установить делегат самостоятельно.

let locatonClass = locationClass() 
locatonClass.delegateLoc = self 

То, что осталось только добавить FUNC, который нуждается в протоколе:

func locationFound() { 
    self.hereIAm.setImage(UIImage(named: "loc1.png"), forState: .Normal) 
    self.activityIndicator1.stopAnimating() 
} 

Это ... Это было очень просто, но так трудно понять, как это сделать. Подробнее о пользовательских протоколах здесь: Custom Protocols

+0

приятно! Извините, мой ответ не был супер описательным, но звучит так, как будто вы его получили. – naomimichiko