---------------------------------------------------------------------------------------------------
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. 优动漫PAINT-绘制透明布料教程

    原是一篇日语教程,觉得挺不错的,就劳烦会日语的朋友帮忙翻译了,特此分享!希望可以帮助到大家在绘画上的学习!原教程转载优动漫官网. 作者:JaneMere 相关资讯还可以关注www.dongmansof ...

  2. 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large问题

    2017年05月10日 09:45:55 阅读数:1659 在做查询数据库操作时,报了以上错误,原因是MySQL的max_allowed_packet设置过小引起的,我一开始设置的是1M,后来改为了2 ...

  3. jq 遍历 元素

    $("#spec").find("div.gods-spe").each(function(i,n){ var child = $(this).children ...

  4. layui Layui-Select多选的使用和注意事项

    1.最近买了layadmin的后台框架,使用Layui-Select总结如下 A.配置:我采用的全局引入配置的方式 赋值(选中状态)

  5. ActiveMQ客户端配置使用

    一.通过JNDI来使用ActiveMQ 1.jndi配置JMS对象 java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQIni ...

  6. CAD二次开发(01)-绘制直线

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. [terry笔记]11gR2_DataGuard搭建_primary零停机

    11gR2搭建dataguard环境,此篇文章是利用rman搭建dataguard,这样的好处是primary不用停机,当然,前提条件是primary已经开启归档. 相对于可以停机,零停机传送数据文件 ...

  8. 2015 Multi-University Training Contest 3 hdu 5326 Work

    Work Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. COGS——T 803. [USACO Hol10] 政党 || 1776: [Usaco2010 Hol]cowpol 奶牛政坛

    http://www.lydsy.com/JudgeOnline/problem.php?id=1776||http://cogs.pro/cogs/problem/problem.php?pid=8 ...

  10. c#程序中使用&quot;like“查询access数据库查询为空的问题

    今天,在开发的过程中发现了一个特别奇怪的问题:access中like查询时候.在Access数据库中运行,发现能够查询出结果.这是在数据库上运行.select * from KPProj where ...