[iOS] UITextField 輸入完成跳至下一個UITextField

本文摘自http://cg2010studio.wordpress.com/2012/10/06/ios-uitextfield-%E8%BC%B8%E5%85%A5%E5%AE%8C%E6%88%90%E8%B7%B3%E8%87%B3%E4%B8%8B%E4%B8%80%E5%80%8B/

因为要翻墙,所以转过来,以后不乱转好东西了,国内情况就是互相转,没有自己去真正的理解,搞得用完之后又忘了,多研究还是比较好的

為了方便使用者輸入完之後跳至下一個欄位Text Field當然可以實作出如此的功能!那我們可以怎麼做呢?可以先參考我上篇文章UITextField 輸入完成讓鍵盤消失

這樣的行為也要交給delegate來幫我們處理,所以必須遵從UITextFieldDelegate協定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-( BOOL )textFieldShouldReturn:(UITextField *)textField
{
     if (textField == _cityTextField) {
         //[textField resignFirstResponder];
         [_districtTextField becomeFirstResponder];
         return NO;
     }
     else if (textField == _districtTextField) {
         //[textField resignFirstResponder];
         [_addressTextView becomeFirstResponder];
         return NO;
     }
     return YES;
}

以上程式碼有何效果,可以參考下圖,首先反應器(Responder)是在_cityTextField手上,當我輸入完_cityTextField,就將反應器交給_districtTextField,同樣當我輸入完_districtTextField,就把反應器交給_addressTextView。

becomeFirstResponder

Notifies the receiver that it is about to become first responder in its window.

- (BOOL)becomeFirstResponder

Return Value

YES if the receiver accepts first-responder status or NO if it refuses this status. The default implementation returns YES, accepting first responder status.

Discussion

Subclasses can override this method to update state or perform some action such as highlighting the selection.

A responder object only becomes the first responder if the current responder can resign first-responder status (canResignFirstResponder) and the new responder can become first responder.

You may call this method to make a responder object such as a view the first responder. However, you should only call it on that view if it is part of a view hierarchy. If the view’s window property holds a UIWindow object, it has been installed in a view hierarchy; if it returns nil, the view is detached from any hierarchy.

Availability

Available in iOS 2.0 and later.

See Also

– isFirstResponder
– canBecomeFirstResponder

Declared In

UIResponder.h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 中,UITextField光标大小和颜色是由系统控制的,我们不能直接修改其大小,但是可以通过修改 UITextField 的 tint 属性来改变光标的颜色。 虽然不能直接修改光标大小,但我们可以通过设置 UITextField 的边框样式为 None,然后通过添加一个自定义的 UIView 作为光标来模拟实现。 以下是一个示例代码,可以在 UITextField 中添加一个自定义的光标: ```swift let customCursorView = UIView(frame: CGRect(x: 0, y: 0, width: 2, height: textField.frame.height)) customCursorView.backgroundColor = UIColor.red textField.tintColor = UIColor.clear textField.addSubview(customCursorView) ``` 在这个代码中,我们创建了一个自定义的 UIView,用于模拟光标。我们将其宽度设置为 2,高度设置为 UITextField 的高度,颜色设置为红色,并将其添加到 UITextField 上。最后,我们将 UITextField 的 tint 设置为 clear,以隐藏系统的光标。 需要注意的是,为了保证自定义光标的位置和系统光标的位置一致,我们还需要在 UITextField 的代理方法中添加以下代码: ```swift func textFieldDidChangeSelection(_ textField: UITextField) { if let selectedRange = textField.selectedTextRange { let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start) if let customCursorView = textField.subviews.last { customCursorView.frame.origin.x = textField.frame.origin.x + textField.textRect(forBounds: textField.bounds).origin.x + textField.font!.size(of: String(textField.text![..<textField.text!.index(textField.text!.startIndex, offsetBy: cursorPosition)]), constrainedToWidth: textField.frame.width).width } } } ``` 在这个代理方法中,我们获取了 UITextField 中被选中的文本范围,然后计算了光标UITextField 中的位置,并将自定义光标的位置进行了调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值