2015-05-26 4 views
0

У меня есть таблица в 1-м интерфейсном контроллере, когда нажимается строка, открывается модальный интерфейс контроллера, он содержит кнопку.Как удалить строку в 1-м интерфейсном контроллере, нажав кнопку во втором интерфейсном контроллере (Modal View)

Я хочу, чтобы кнопка удаляла строку в первом интерфейсном контроллере.

Вот мой код:

В первый контроллер интерфейса

Blockquote

// It opens up a modal view (with the context of the tapped row) 

    override func contextForSegueWithIdentifier(segueIdentifier: String, inTable table: WKInterfaceTable, rowIndex: Int) -> AnyObject? { 
     var timelineRow = timeline.reverse() 
     return timelineRow[rowIndex] 

    } 

Blockquote

А вот мой код во втором интерфейсе контроллера

Blockquote

override func awakeWithContext(context: AnyObject?) { 
    super.awakeWithContext(context) 

     sentContext = (context as? Dictionary)! 
     sentRow = sentContext 
     //sentRow contains the context 
    } 


    @IBAction func deleteRow() { 
    var sentRow : [String:String] = ["action":"delete"] 
    NSNotificationCenter.defaultCenter().postNotificationName("notification_DeleteRow", object: nil, userInfo: sentRow)  
    dismissController() 
} 

Blockquote

  • Я послал индекс строки через contextForSegueWithIdentifier.

  • В контроллере 2 интерфейса я извлек контекст и поместить его в переменной

  • я отправить обратно USERINFO Повсеместно в NSNotificationCenter

Моей проблема:

  • Как я могу использовать пользовательскую информацию, отправленную обратно с модального контроллера, чтобы удалить строку с резьбой.

  • Как бы мне удалось удалить повернутой строку (первый IC), нажав на кнопку удаления, расположенной в (2-IC)

When you tap on a row, a modal view opens up This modal view is opened when you tap on a row

ответ

2

Есть несколько вариантов в этой ситуации:

  1. Вы можете использовать NSUserDefaults, и хотя это будет работать, это не значит, что этот класс предназначен для использования д.
  2. Вы можете создать свой собственный NSNotification и транслировать его с помощью модального контроллера. Ваш первый контроллер интерфейса прослушал бы это событие и удалил бы соответствующую запись.
  3. Вы можете передать ссылку на ваш первый контроллер интерфейса на контроллер модема и получить его в awakeWithContext:.Это позволяет вам установить первый контроллер интерфейса в качестве делегата. Как только это произойдет, вы можете определить любой протокол, который вы хотите сообщить первому контроллеру важных событий.

У меня есть сообщение в блоге, который идет в более подробно на втором две темы: Advanced WatchKit Interface Controller Techniques

+0

- Я создал NSNotification во втором интерфейсном контроллере (внутри IBAction), и он передает его 1-му интерфейсу Controller. -Так теперь я должен создать функцию в 1-м интерфейсном контроллере, чтобы удалить строку, но как мне получить доступ к той же строке и удалить ее? – AziCode

+1

Вы можете передать свою информацию (например, идентификатор записи, например) в словаре 'userInfo' вашего уведомления. В вашем первом контроллере вы можете найти этот идентификатор и выполнить правильное удаление. –

+0

Не могли бы вы дать мне больше указания? должен ли я создать словарь во втором интерфейсном контроллере? должен ли я искать этот идентификатор в (awakeWithContext 1-го контроллера интерфейса или в функции, созданной с помощью NSNotification? – AziCode

1

Это может быть достигнуто с пользовательской легко делегатом,

@protocol MyCustomDelegate <NSObject> 

- (void)deleteButtonTapped:(id)sender; 

@end 

- (IBAction)deleteButtonTapped:(id)sender { 
    if ([self.delegate respondsToSelector:@selector(deleteButtonTapped:)]) { 
     [self.delegate deleteButtonTapped:sender]; 
    }; 
} 

Более подробный ответ на here.

Смежные вопросы