• 经验之谈—控制器的view的显示


    经验之谈—控制器的view的显示

      

    • 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果。
    • 先举个例子给大家看一下: 
    • 我们创建一个ZYTestViewController : UITableViewController 
    • 然后我们稍微实现以下tableview的数据源方法

    #pragma mark - Table view data source

     - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    {

        return 10;

    }

     

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    {

        static NSString *ID = @"cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

        if (!cell) {

            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

        }

     

        cell.textLabel.text = @"test";

     

        return cell;

    }

    •  

    就先别搞那么复杂先,就这样完成了一个UITableViewController的创建

    • 接下来我们把这个控制器的view添加到我们的主控制中(UIViewController)

     - (void)viewDidLoad

    {

        [super viewDidLoad];

     

     - (void)viewDidLoad {

        [super viewDidLoad];

     

        ZYTestViewController *testVc = [[ZYTestViewController alloc]init];

        [self.view addSubview:testVc.view];

        testVc.view.frame = CGRectMake(100, 100, 200, 300);

    }

     

     }

    •   

    然后我们看一下,是否有我们想要的效果: 

     

    我们是确实能将这个tableView添加上去了,但是出现了不能显示数据的问题。

    • 原因在于:我们的ZYTestViewController控制器死了,因为是一个局部变量,所以导致我们的数据不能显示。造成一个控制的view还在,但是这个view的控制器死了,这个非常危险的一件事情。
    • 所以我们就急迫的需要保住这个控制器,那么我们就需要对这个控制器进行强引用。( 在view里面添加了第二个控制器的view进来时,一定要强制引用,否则第二个控制器的view的动作事件无法点击)

    @property(nonatomic,strong)ZYTestViewController *testView;

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        ZYTestViewController *testVc = [[ZYTestViewController alloc]init];

        [self.view addSubview:testVc.view];

        testVc.view.frame = CGRectMake(100, 100, 200, 300);

        self.testView = testVc;

     

    }

    •  

    我们再看一下效果: 

     

    只有这样才能显示我们的Cell的数据

    所以得出一个结论:只要view在,view所在的控制器必须得在,这样才能保证view内部的数据和业务逻辑正常

  • 相关阅读:
    CentOS7安装Oracle 11gR2 安装
    CentOS7 FTP服务搭建(虚拟用户访问FTP服务)
    .NET中RabbitMQ的使用
    ElasticSearch(站内搜索)
    SignalR 2.1 简单入门项目
    Oracl基础知识(一)
    CentOS6—HAProxy安装与配置
    Redis C#缓存的使用
    CentOS6— Redis安装(转和延续)
    Linux(CentOS)常用操作指令(二)
  • 原文地址:https://www.cnblogs.com/YangFuShun/p/5682166.html
Copyright © 2020-2023  润新知