從零學React Native之11 TextInput

TextInput 組件是用來通過鍵盤輸入文字,可以使用View組件和Text組件樣式,沒有自己特定的樣式。
與Text組件類似,TextInput組件內部的元素不再使用FlexBox布局,而采用文本布局。詳情見上一篇文章從零學React Native之10Text

TextInput屬性

只列出了一些常用的,詳情見官網

| 屬性名 | 描述 |
| :------------- :|:-------------:|
| defaultValue | 字符類型,定義TextInput組件中的字符串默認值 |
| autoCorrect | 布爾類型,是否自動更正用戶輸入,默認是true |
| autoFocus | 是否自動獲取焦點,默認為false|
| editable | 布爾類型,是否允許修改組件內字符,false代表不能修改 |
| keyboardType | 字符串類型,取值包括'default', 'email-address', 'numeric', 'phone-pad', ( 'ascii-capable', 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search')括號里的只支持ios平臺 |
| MaxLength | 數值類型,定義TextInput最多允許用戶輸入多少個字符 |
| multiline | 布爾類型,是否允許多行顯示,默認值false|
| placeholder | TextInput無文字的時候顯示的提示內容 |
| placeholderTextColor | placeholder文字顏色,建議不用修改 |
| secureTextEntry | 布爾類型 true按照密碼樣式顯示,默認是false |
| value | 字符串類型,設置TextInput里面的值,目前有可能帶來屏幕閃爍,可以用defaultValue臨時代替|
| onSubmitEditing | 用戶點擊提交鍵的時候調用,如果允許多行顯示,該屬性失效 |
| onContentSizeChange | 內容長度發生變化的時候,只會在多行顯示的時候生效 |
| onChangeText | 內容長度發生變化的時候調用 |

0.34版本, Android端添加了controlled selection屬性
詳情:
Add TextInput controlled selection prop on Android (<tt>3c1b69c</tt>) - @janicduplessis

下面的例子

class UselessTextInput extends Component {
  constructor(props) {
    super(props);
    this.state = { text: 'Useless Placeholder' };
  }

  render() {
    return (
      <TextInput
        style={{marginTop:100,height: 40, borderColor: 'gray', borderWidth: 1}}
        onChangeText={(text) => this.setState({text})}
        value={this.state.text}
      />
    );
  }
}

// App registration and rendering
AppRegistry.registerComponent('AwesomeProject', () => UselessTextInput);
ios運行結果
Android運行結果

兩個平臺不同表現

對比發現 Android端 borderWidth是不生效的,默認有一個輸入的線,符合Android設計,Android字體默認很小,我們把上面樣式中的height換成fontSize,來看下

 <TextInput
      style={{marginTop:100,fontSize: 40, borderColor:'gray',borderWidth: 1}}
      onChangeText={(text) => this.setState({text})}
      value={this.state.text}
/>

可以看到Android端字體變大了,但是IOS端沒有了

左面是IOS右面Android

IOS平臺上,沒有指定height,TextInput組件不會顯示。
一般情況下,我們需要指定FontSize和height,當上下padding為0的時候,height至少是FontSize的1.1倍時Android端才能保證字體完全顯示。而默認Android端是有padding的。
如下面的代碼可以基本適配兩個平臺:

render() {
    return (
       <TextInput
            style={{marginTop:100,fontSize: 30,height:43, 
            borderColor: 'gray', borderWidth: 1,
            paddingBottom:5,paddingTop:5}}
            onChangeText={(text) => this.setState({text})}
            value={this.state.text}
          />
        );
    }```
##TextInput組件的生命周期和回調方法
1. 當用戶點擊輸入框時,onFocus調用,獲取焦點
2. 當用戶輸入的時候onChangeText和onChange回調,一般使用onChangeText,里面參數為輸入的文本
3. 當用戶按下提交鍵,onSubmitEditing回調,多行沒有提交鍵
4. 當組件失去焦點,onEndEditing或onBlur調用,一般情況用onEndEditing就足夠了

注意:當點擊點擊另一個TextInput組件時會觸發失去焦點事件,**在單行的輸入框中按下提交鍵,Android端不觸發失去焦點事件。**

最方便的操作就在onChangeText事件中時刻獲取用戶輸入的內容


更多精彩請關注微信公眾賬號likeDev
![likeDev.jpg](http://upload-images.jianshu.io/upload_images/1132780-8055315c103d2753.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容