如何通过按第二个接口控制器(模态视图)中的按钮

时间:2015-05-26 16:49:11

标签: watchkit

我在第一个接口控制器中有一个表,当按下一行,模态接口控制器打开时,它包含一个按钮。

我希望按钮删除第一个接口控制器中的行。

这是我的代码:

在第一个接口控制器

  

块引用

   // 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]

   }
  

块引用

这是我在第二个接口控制器中的代码

  

块引用

   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()
 }
  

块引用

  • 我通过contextForSegueWithIdentifier发送了行的索引。

  • 在第二个接口控制器中,我已经提取了Context并将其置于变量中

  • 然后我通过NSNotificationCenter发回userInfo

我的问题:

  • 如何使用从模态控制器发回的userInfo来删除抽头行。

  • 如何通过按下位于(第二个IC)的删除按钮

  • 来删除轻敲的行(第一个IC)

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

2 个答案:

答案 0 :(得分:2)

在这种情况下有几种选择:

  1. 您可以使用NSUserDefaults,虽然它可以使用,但这并不是指如何使用该类。
  2. 您可以创建自己的自定义NSNotification并从模态控制器广播它。您的第一个接口控制器将侦听此事件并删除相应的记录。
  3. 您可以将对第一个接口控制器的引用传递给模态控制器,并在awakeWithContext:中检索它。这允许您将第一个接口控制器设置为委托。一旦发生这种情况,您可以定义您想要通知第一个控制器重要事件的协议。
  4. 我有一篇博文,详细介绍了后两个主题:Advanced WatchKit Interface Controller Techniques

答案 1 :(得分:1)

这可以通过自定义委托轻松实现,

@protocol MyCustomDelegate <NSObject>

- (void)deleteButtonTapped:(id)sender;

@end

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

更详细的答案是here