JSPatch学习系列-UI进阶

来源:互联网 发布:html5音乐播放器源码 编辑:程序博客网 时间:2024/05/17 04:01

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