how to push view controller from a UIView's subclass

后端 未结 2 1460
再見小時候
再見小時候 2021-01-13 19:18

I created a view \"CategoryTableView\" that subclass from UIView. And CategoryTableView contains a UITableView. I added <

相关标签:
2条回答
  • 2021-01-13 19:49

    CategoryTableView.h

    @property (retain, nonatomic) parentViewController *parent; //create one property for parent view like this
    

    CategoryTableView.m

    @sythesize parent;
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [parent.navigationController . . .]; // preform action
        //OR..
        [parent presentModalViewController: . . .]; // present modal view
    }
    

    parent.m

    //while calling your CategoryTableView assign self to your parent object
    
        CategoryTableView *tblView = [CategoryTableView alloc] init];
        tblView.parent = self;
    
    0 讨论(0)
  • 2021-01-13 19:49

    You need to use custom delegates to achieve this...

    in CategoryTableView.h

    @protocol CategoryTableViewDelegate <NSObject>
    
    -(void)pushViewControllerUsinDelegate:(UIViewController *)viewController;
    
    @end
    
    @interface CategoryTableView : UIView
    
    @property (nonatomic, retain) id<CategoryTableViewDelegate> delegate;
    
    @end
    

    in CategoryTableView.m

    @implementation CategoryTableView

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //Create the required UIViewControllers instance and call the delegate method.
        UIViewController *viewController = [[UIViewController alloc] init];
        [self.delegate pushViewControllerUsinDelegate:viewController];
    }
    
    
    @end
    

    in HomeViewController.h

     @interface HomeViewController : UIViewController <CategoryTableViewDelegate>
    
        @end
    

    in HomeViewController.m

    @implementation HomeViewController
    
    -(void)viewDidLoad
    {
        [super viewDidLoad];
    
        //initialization of CategoryTableView like this...
        CategoryTableView *categoryTableViewInstance = [[CategoryTableView alloc] init];
        [categoryTableViewInstance setDelegate:self];
    
    }
    
    -(void)pushViewControllerUsinDelegate:(UIViewController *)viewController
    {
        [self.navigationController pushViewController:viewController animated:YES];
    }
    
    0 讨论(0)
提交回复
热议问题