JSPatch学习系列-UI进阶

02-UI进阶

学习大纲

  1. TableView数据源方法
  2. TableView代理方法
  3. dealloc引发的问题

示例代码

初始化导航控制器根控制器

defineClass('ViewController', {
    viewDidLoad:function() {
        // 调用OC中的viewDidLoad方法
        self.ORIGviewDidLoad();
        // 设置title
        self.setTitle('首页');
        // 绑定导航栏右侧按钮事件
        self.bindEvent();
    },
    touchesBegan_withEvent:function(touches, event) {
        self.ORIGtouchesBegan_withEvent(touches, event);
        require('UIBarButtonItem, UIButton');
        var btn = self.navigationItem().rightBarButtonItem();
    },
    bindEvent:function() {
        require('UIBarButtonItem, UIButton');
        // 控制器跳转
        var btnRight = self.navigationItem().rightBarButtonItem();
        btnRight.setTarget(self);
        btnRight.setAction('pushToTableViewController');
    },
    pushToTableViewController:function() {
        require('TableViewController');
        var destVc = TableViewController.alloc().init();
        self.navigationController().pushViewController_animated(destVc, 1);
    }
})

设置TableViewController

defineClass('TableViewController : UITableViewController', {
    viewDidLoad:function() {
        dataSource = null;
        // self.ORIGviewDidLoad();
        self.setTitle('列表页');
        self.setupData();
        self.tableView().setRowHeight(55);  // 设置行高
        // self.tableView().setDelegate(self);
        // self.tableView().setDataSource(self);
        var flag = self.tableView().hidden();
        // console.log('hidden=' + flag);  // 判断视图是否是隐藏状态

        // 调用控制器中已经存在的方法
        self.warning_complete(0, block("", function(){
            console.log('重写dealloc方法,来回 push & pop 会报错,why?');
        }));

        self.warning_complete(1, block("", function(){
            console.log('如何定义带block的方法?');
        }));
    },
    /********************************************************************************************/
    // 重写dealloc方法,来回 push & pop 会报错,why?
    /********************************************************************************************/
    // dealloc:function() {
    //  self.ORIGdealloc();
    //  console.log('dealloc');
    // },
    tableView_numberOfRowsInSection:function(tableView, section) {
        return dataSource.length;
    },
    // 创建cell
    tableView_cellForRowAtIndexPath:function(tableView, indexPath) {
        require('UITableViewCell');
        var cell = tableView.dequeueReusableCellWithIdentifier('Cell');
        if (cell == false) {
            cell = UITableViewCell.alloc().initWithStyle_reuseIdentifier(0, 'Cell');
        }
        return cell;
    },
    // 赋值cell
    tableView_willDisplayCell_forRowAtIndexPath:function(tableView, cell, indexPath) {
        cell.textLabel().setText(dataSource[indexPath.row()]);
    },
    tableView_didSelectRowAtIndexPath:function(tableView, indexPath) {
        // var alert = require('UIAlertView').alloc().init();
        // alert.setTitle('提示');   // 标点符号不能是中文状态下的!否则报错:`SyntaxError: Invalid character '\u65307'`
        // alert.setMessage('选中了第 ' + indexPath.row() + ' 行');
        // // alert.setDelegate(self);
        // alert.addButtonWithTitle('取消');
        // alert.addButtonWithTitle('确定');
        // // var alert = require('UIAlertView').alloc().initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("title", "message", self, "取消", null);
        // alert.show();

        // 调用带有block参数的方法
        self.add_b_complete(0, indexPath.row(), block("BOOL, int", function(flag, sum) {
            if (flag) { console.log("sum=" + sum)};
        }));
        // self.add(3, 7, function(){
        //  console.log('匿名函数。。。');
        // });
        // self.add(3, 7, self.complete);
    },
    // 为表格提供数据源
    setupData:function() {
        var data = self.getProp('data');
        if (data) {return data;};
        data = [];
        var length = 50;
        for (var i = length - 1; i >= 0; i--) {
            data.push('hello world - ' + (length-i-1));
        };
        self.setProp_forKey(data, 'data');
        dataSource = data;
    },
    /********************************************************************************************/
    // 如何定义带block的方法?
    /********************************************************************************************/
    add:function(num1, num2, xxx) {
        var sum = num1 + num2;
        xxx();
        // self.complete(sum, 1);
    },
    complete:function() {
        console.log('sum=' + 1 + ' flag=' + 1);
    }
});
/*
function complete1(sum, flag) {
    console.log('sum=' + sum + ' flag=' + flag);
}
*/
/*
// 这里不能有“//”这种行内注释?否则就报错:SyntaxError: Unexpected end of script
// sdfsdf
*/




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值