---------------------------------------------------------------------------------------------------
React.native是facebook开源的一套基于JavaScript的开源框架,
非常方便用来开发移动设备的app。

并且,方便及时更新app的UI与数据。也非常方便部署。
goodmao希望帮助大家迅速上手掌握。
----------------------------------------------------------------------------------------------------


參考:
源代码參考:Layout.h/.c文件
----------------------------------------------------------------------------------------------------



我们这一节,简介Reactbutton的使用。
目的是让大家在分分钟内理解并学会使用方法。

我相同也查看了n篇帖子和facebook的介绍贴(见上面链接),
一般来说,存在以下的问题:
1.无法直接让刚開始学习的人粘贴到demo代码中理解并使用,
2.不少帖子翻译和编写都有不完好甚至错误之处。

我都自己编程执行过,在这里的解说和案例,
为了方便大家,都专门编写了极其简单的样例,
但包括了最经常使用的、必须用的功能。




一、button简单介绍:
button是用户进行交互的一个控件,用户能够点击触发事件的发生,从而让App运行相应的功能。

(1)React的button有三种
    1.高亮触摸button TouchableHighlight
       按下时。button会有高亮效果。
       即在该button上系统设置了一个视图,
       当用户按下时。会让该视图变暗且透明度减少,提示用户该button被按下了。
    2.透明触摸button TouchableOpacity
       按下时,button视图。会呈现半透明效果。并能看到button的背景视图。
    3.无反馈触摸button TouchableWithoutFeedback
       按下时,button没有变化,但设置的响应方法会被系统调用。

(2)Reactbutton的事件处理
    button关联了四个事件:
    1.button按下事件:onPress          - 按下并松开button。会触发该事件
    2.button长按事件:onLongPress  - 按住button不松开,会触发该事件
    3.button按下事件:onPressIn       - 按下button不松开,会触发该事件
    4.button松开事件:onPressOut    - 按下button后松开,或按下button后移动手指到button区域外,都会触发该事件

(3)button表现形式
    1.文字button
    在button上设置文字

    2.图片button
    在button上设置图片
    图片来源。相同能够是直接加入到项目中的静态图片,也能够是来自网络的图片。

    关于图片设置。能够參考上一节Image的使用介绍。

二、button的用法

(1)设置模式和创建React变量
'use strict';

var React = require('react-native');

var {

  AppRegistry,
StyleSheet,
View,
Text,
Image,
//1.高亮触摸
TouchableHighlight,
//2.不透明触摸
TouchableOpacity,
//3.无反馈触摸
TouchableWithoutFeedback,
} = React;


(2)定义样式
var styles = StyleSheet.create({

  container: {
//flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'cyan',
}, size: {
width: 140,
height: 95,
}, buttonText: {
fontSize: 28,
color: 'white',
alignSelf: 'center'
}, button: {
width: 140,
height: 95,
//flex: 1,
//flexDirection: 'row', //子视图排成一行; 默认是排成一列
backgroundColor: 'blue',
borderColor: 'blue',
borderWidth: 1,
borderRadius: 8,
},
});

(3)创建组件对象
var HelloReact = React.createClass({

  //定义button响应事件处理方法
//1.按键按下
onPressed_btn() {
console.log('button pressed !');
}, //2.长按
onLongPress_btn() {
console.log('button onLongPress !');
}, //3.被按下时 - 按下button不松开,会触发该事件
onPressIn_btn() {
console.log('button onPressIn !');
}, //4.松开button时
//- 按下button后松开,或按下button后移动手指到button区域外
onPressOut_btn() {
console.log('button onPressOut !');
}, //1.高亮触摸 TouchableHighlight - 按下时。button会有高亮效果
//2.透明触摸 TouchableOpacity - 按下时,button会半透明并能看到背景
//3.无反馈触摸 TouchableWithoutFeedback - 按下时,button没有变化。但绑定的响应方法会被系统调用 //渲染方法
render : function() {
return ( <View style={styles.container}>
<TouchableHighlight style = {styles.button} onPress={this.onPressed_btn}>
<Image
source={require('image!goodmao')}
style={styles.size}
/>
</TouchableHighlight> <TouchableOpacity style = {styles.button} onPress={this.onPressed_btn}>
<Image
source={require('image!goodmao')}
style={styles.size}
/>
</TouchableOpacity> <TouchableWithoutFeedback style = {styles.button} onPress={this.onPressed_btn}>
<Image
source={require('image!goodmao')}
style={styles.size}
/>
</TouchableWithoutFeedback> </View>
);
} });

说明:
    1.定义了四个方法,用于处理button事件
       方法名字,自定义。注意可读性。
       a.按键按下 onPressed_btn( ) 
       b.长按 onLongPress_btn( )
       c.被按下时  onPressIn_btn( )
       d.松开button时 onPressOut_btn( )

     2.关联button事件与事件处理方法
        在button的属性中,指定button事件和相应的方法就可以。

           
 <TouchableHighlight
style = {styles.button}
onPress = {this.onPressed_btn}
onLongPress = {this.onLongPress_btn}
onPressIn = {this.onPressIn_btn}
onPressOut = {this.onPressOut_btn}
> <Text style={styles.buttonText}>我是按钮</Text>
</TouchableHighlight>


(4)注冊组件
AppRegistry.registerComponent('HelloReact', ()=>HelloReact);


(5)执行效果图
    1.三种button
    

    2.高亮button被按下
    

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFveWluZ3lvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


    3.透明button被按下
    

    4.无反馈button被按下
    


三、注意事项
(1)必须给button设置子视图
也就是说。button必须设置显示的文字或图片,否则会报错。
比如:
            <TouchableHighlight style = {styles.button} onPress = {this.onPressed_btn}>
                <Text style={styles.buttonText}>我是按钮</Text>
            </TouchableHighlight>
编译执行时,Xcode错误例如以下:
 message: Invariant Violation: onlyChild must be passed a children with exactly one child."

(2)设置文字button两种方法
<TouchableHighlight style = {styles.button} onPress = {this.onPressed_btn}>
<Text style={styles.buttonText}>我是按钮</Text>
</TouchableHighlight>
<TouchableHighlight style = {styles.button} onPress={this.onPressed_btn}>
<View style={styles.button}>
<Text style={styles.buttonText}>我是按钮</Text>
</View>
</TouchableHighlight>



【Facebook的UI开发框架React入门之九】button简单介绍(iOS平台)-goodmao的更多相关文章

  1. 【Facebook的UI开发框架React入门之八】Image的使用简单介绍(iOS平台)-goodmao

    --------------------------------------------------------------------------------------------------- ...

  2. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇—多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  3. UWP开发入门(九)——简单界面的布局技巧及屏幕适应

    嘿嘿嘿,题目比较绕哈.本篇主要讨论一般情况下,页面的布局技巧,怎么将元素的展现尽量做到分辨率无关.基本的思路仍然是尽量少的标定具体的数字,而是用比列来标注各元素占据的空间. 这里我打算用易信的名片页来 ...

  4. 文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍

    一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...

  5. Hive入门笔记---1.Hive简单介绍

    1. Hive是什么 Hive是基于Hadoop的数据仓库解决方案.由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性,因此使用Hive构建的数据仓库也秉承了这些特性.这是来自官方的解 ...

  6. SpringSecurity 3.2入门(6)简单介绍默认使用的十一个过滤器

    Security提供了20多个filter,每个过滤器都提供特定的功能.这些filter在Spring Security filter过滤器链中的缺省顺序由 org.springframework.s ...

  7. React入门教程(二)

    前言 距离上次我写 React 入门教程已经快2个月了,年头年尾总是比较忙哈,在React 入门教程(一)我大概介绍了 React 的使用和一些注意事项,这次让我们来继续学习 React 一. Rea ...

  8. React入门2

    React 入门实例教程 最简单开始学习 JSX 的方法就是使用浏览器端的 JSXTransformer.我们强烈建议你不要在生产环境中使用它.你可以通过我们的命令行工具 react-tools 包来 ...

  9. 基于React 的前端UI开发框架 及与Electron 的结合 https://cxjs.io/

    1.cxjs  基于React 的前端UI开发框架    https://cxjs.io/ coreu   http://coreui.io/ 2.antd-admin                ...

随机推荐

  1. 微信小程序------开发测试

    一.注册小程序 注:微信小程序注册的邮箱不能被其他微信公众平台注册,未被微信开放平台注册,未被给人微信号绑定的微信号. 二.注册完小程序后,下载开发者工具 开发者工具的使用: 1.打开开发者工具:用已 ...

  2. 前端学习之路——scss篇

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 Sass依赖于ruby环境,所以装sass之前先 ...

  3. Python3基础笔记---线程与进程

    参考博客:Py西游攻关之多线程(threading模块) 一.并发与并行的区别 并发:交替做不同事的能力并行:同时做不同事的能力 行话解释:并发:不同代码块交替执行的性能并行:不同代码块同时执行的性能 ...

  4. 【模板】扩展中国剩余定理(EXCRT)

    扩展中国剩余定理,是求解形如:$x\equiv a_{1}($ mod $b_{1})$$x\equiv a_{2}($ mod $b_{2})$$x\equiv a_{3}($ mod $b_{3} ...

  5. 版本号比较[versionCompare]

    /*** * 版本号比较 * @param v1 版本号a * @param v2 版本号b * @return -1代表不是合格版本号:0代表一样大.1 代表版本号a大于版本号b.2代表版本号b大于 ...

  6. Linux 程序包管理-RPM

    程序简介:  POSIX(Portable Openratin System)跨平台系统:不同操作系统平台的标准C库(glibc)都是遵循POSIX规范的,这样基于标准库开发程序的源代码可以夸平台编译 ...

  7. Centos7 安装 opencv

      Centos7 安装 opencv CentOS Linux release 7.2.1511 (Core)   1.安装依赖     yum install https://dl.fedorap ...

  8. mariadb数据库的链接查询和表格设计

    链接查询 练习准备: --创建学生表 create table students ( id int unsigned not null auto_increment primary key, name ...

  9. 紫书 习题8-8 UVa 1612 (贪心+精度)

    这道题我很快就写出来了, 但是一直WA, 然后发现是精度, 这坑了我一个小时-- (1)贪心.每次就尽量分数高, 可以保证最后分数最高 (2)神tm精度问题.记住判断大于小于和等于的时候要用EPS(1 ...

  10. XML快速注释

    eclipse中编辑java或C/C++,python文件时,注释的快捷键均为 "CTRL + / ",编辑xml文件时,该快捷键无效. eclipse XML 注释:CTRL + ...