Passing data between UITableViewCell and UITableViewController?

前端 未结 2 1971
野性不改
野性不改 2021-01-20 17:00

I created master details template project in xcode 4.6 and I added custom cell with 2 textfields. I also created new class which is subclass of UITableViewCell and inside th

相关标签:
2条回答
  • 2021-01-20 17:45

    In your case you need to create Protocol:

    I just Give Basic Idea for how to Create Protocol

    Also Read This Question

    #DetailViewController.h
    
    #import <UIKit/UIKit.h>
    
    @protocol MasterDelegate <NSObject>
    -(void) getButtonTitile:(NSString *)btnTitle;
    @end
    
    
    @interface DetailViewController : MasterViewController
    
    @property (nonatomic, assign) id<MasterDelegate> customDelegate; 
    
    #DetailViewController.m
    
    if([self.customDelegate respondsToSelector:@selector(getButtonTitile:)])
    {
              [self.customDelegate getButtonTitile:button.currentTitle];    
    }
    
    #MasterViewController.m
    
    create obj of DetailViewController
    
    DetailViewController *obj = [[DetailViewController alloc] init];
    obj.customDelegate = self;
    [self.navigationController pushViewController:reportTypeVC animated:YES];
    
    and add delegate method in MasterViewController.m for get button title.
    
    #pragma mark -
    #pragma mark - Custom Delegate  Method
    
    -(void) getButtonTitile:(NSString *)btnTitle;
    {
        NSLog(@"%@", btnTitle);
    
    }
    
    0 讨论(0)
  • 2021-01-20 17:49

    You shouldn't keep data inside the UITableViewCell, as it breaks the MVC.

    You need to get a reference of the UITextField on your cell. This is how I do in a login form:

    I have a custom cell subclass called TextFieldCell, it has an outlet called textField, I want that my UITableViewController have references to these UITextFields.

    First I open my storyboard, set the cell class to TextFieldCell and than connect the UITextField to cell textField outlet. Than I add this to the tableView:cellForRowAtIndexPath:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        (…)
        if (indexPath.row == 0) {
            // Sets the textField of the first cell as the loginTextField.
            self.loginTextField = tCell.textField;
        } else {
            // Sets the textField of the second cell as the passwordTextField.
            self.passwordTextField = tCell.textField;
        }
        tCell.textField.delegate = self;
        (…)
    }
    

    Now I can access the value of my loginTextField and my passwordTextField. I do that on the tableView:cellForRowAtIndexPath: because that's when I'm creating the cell to add to the table view.

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