Objective C View to Controller Communication

后端 未结 5 935
滥情空心
滥情空心 2021-01-29 04:54

What is the proper way to accept user input in a view and then transfer it to that view\'s controller? I know the NotificationCenter is one option, but surely there is a more el

相关标签:
5条回答
  • 2021-01-29 05:12

    You are looking for delegation, where the controller set itselfs as the delegate of the view. You know it from UITableViewDelegate.

    0 讨论(0)
  • 2021-01-29 05:15

    Use the delegate protocol design pattern, or target-action by subclassing UIControl. Think about how a UIButton tells a view controller that it's been pressed. In interface builder, you connect an action - a selector something like touchUpInside: to a target - the view controller that owns it. In non-IB, you directly tell the UIButton what selector and what target to use.

    Both methods make sense in different cases. For a UITextField, for example, it makes more sense to use delegation because it's possible for the text field to send you any number of events, such as an event when the user begins editing, ends editing, or types a character.

    For a button, it makes more sense to use target-action because there's really only one event expressed in different forms.

    For swipes and drags and other gestures, use UIGestureRecognizers.

    0 讨论(0)
  • 2021-01-29 05:17

    Often the UIKit objects like UITextField have delegate methods that you can implement to perform your business logic. E.g UITextField has a delegate method called - textFieldDidEndEditing: that gets called after the user has dismissed the keyboard.

    0 讨论(0)
  • 2021-01-29 05:29

    You're looking for Delegation or a Data Source. You can see more information about this here, Delegation and Data Sources

    A brief example of this would be, something along the lines of this:

      //MyViewSubclass.h
    
      @protocol MyViewSubclassDelegate
      //Implement your delegate methods here.
      -(void)didTouchView; 
      @end
    
      @interface MyViewSubclass {
    
         id<MyViewSubclassDelegate>delegate;
      }
      @property(nonatomic,assign)id<MyViewSubclassDelegate>delegate;
    

    Of course, @synthesize your delegate in MyViewSubclass.m

    Now in the class's header, that you want the delegate of MyViewSubclass to be, you need to conform to the `MyViewSubclassDelegate Protocol.

     #import "MyViewSubclass.h"
     @interface MyViewController : UIViewController <MyViewSubclassDelegate>
    

    In your @implementation of MyViewController., implement the MyViewSubclassDelegate method of -(void)didTouchView.

    When you initialize and create your MyViewSubclass object, you set MyViewController as the delegate:

    myViewSubclass.delegate = self // Self being MyViewController.
    

    In your MyViewSubclass, when you're ready to forward any information, or simply want to fire a method you would do [self.delegate didTouchView]

    Hope this helps !

    0 讨论(0)
  • 2021-01-29 05:35

    Make your view a subclass of UIControl and implement the target/action design pattern - use the sendActionsForControlEvents: method to message the controller.

    0 讨论(0)
提交回复
热议问题