---------------------------------------------------------------------------------------------------
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. jQuery获取单选框(复选框)选中的状态

    jQuery 获取单选框(复选框)选中的状态 <input type="checkbox" name="" id="choose"/& ...

  2. SpringBoot学习笔记(15)----SpringBoot使用Druid

    直接访问Druid官网wiki,有详细教程,地址如下: SpringBoot支持Druid地址:https://github.com/alibaba/druid/tree/master/druid-s ...

  3. eclipse的maven工程视图切换

    上面图切换成下面图: 点击eclipse右上角,如下图红圈,然后在选择javaEE这样就切换成javaEE视图了

  4. 路飞学城Python-Day15(模块二思维导图)

  5. 【转】一天学会PHP(转)

    [转]一天学会PHP(转) 只需要一天,只要你用心去看和学,一定行. - 这里希望大家需要明白一点,这只是在讲如何快速入门,更好的认识PHP!也能初级掌握PHP基础知识!PHP语言博大精深!并不是一两 ...

  6. gps 地图

    http://www.cnblogs.com/sylvanas2012/p/5342530.html http://blog.csdn.net/ma969070578/article/details/ ...

  7. deque迭代器失效的困惑?

    在实现LRU算法的时候lru_list 開始用的是deque 可是由于害怕其在插入删除上的迭代器失效情况的诡异情况.遂用list取代之. 在数据量比較大的时候性能不是非常好.性能优化分析的时候决定用d ...

  8. [Angular] Short Imports with TypeScript Path Mapping

    The idea is change from: import {CoreModule} from '../core/core.module'; to: import {CoreModule} fro ...

  9. 程序员之--C语言细节13(二维数组和指针,&amp;*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)

    主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...

  10. hibernate ID生成策略配置

    1.Student.hbm.xml配置 <hibernate-mapping package="com.wxh.hibernate.model"> <class ...