ฉันสงสัยเกี่ยวกับการเปลี่ยนสีของเคอร์เซอร์ / คาเร็ตในUITextField
(และUITextView
ถ้าเป็นคำตอบเดียวกัน) ใน iOS ฉันเห็นคำตอบสำหรับการพัฒนา OSX แต่ไม่มีอะไรสำหรับ iOS
เป็นไปได้ไหม
ฉันสงสัยเกี่ยวกับการเปลี่ยนสีของเคอร์เซอร์ / คาเร็ตในUITextField
(และUITextView
ถ้าเป็นคำตอบเดียวกัน) ใน iOS ฉันเห็นคำตอบสำหรับการพัฒนา OSX แต่ไม่มีอะไรสำหรับ iOS
เป็นไปได้ไหม
คำตอบ:
หากคุณกำหนดเป้าหมายเป็น iOS 7+ สิ่งนี้จะทำให้ง่ายขึ้น เพียงแค่เปลี่ยนtintColor
เขตข้อมูลด้วยเคอร์เซอร์โดยใช้ลักษณะที่ปรากฏของพร็อกซีและจะมีผลกับแอพ:
สวิฟท์ 3.0:
UITextField.appearance().tintColor = .black
Objective-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
คำตอบเดียวกันใช้สำหรับบุคคลUITextField
:
สวิฟท์ 3.0:
myTextField.tintColor = .black
Objective-C
[myTextField setTintColor:[UIColor blackColor]];
ด้วย iOS7 คุณสามารถเปลี่ยน tintColor ของ textField ได้
สวิฟท์ 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
หมายเหตุ: คำตอบนี้ล้าสมัยและควรใช้สำหรับการพัฒนา pre-iOS 7 เท่านั้น ดูคำตอบอื่น ๆ สำหรับวิธีแก้ปัญหา 1 บรรทัดโดยใช้ proxy ลักษณะที่ปรากฏใน iOS 7
ฉันมาถึงคำถามนี้หลังจากที่ฉันประสบปัญหาเดียวกันในโครงการที่ฉันทำงานอยู่
ฉันจัดการเพื่อสร้างโซลูชันที่ทีมตรวจสอบ AppStore จะยอมรับเพราะไม่ได้ใช้ API ส่วนตัวที่มีอยู่
ฉันได้สร้างตัวควบคุมที่เรียกว่า DGTextField ที่ขยาย UITextField
yourTextField.tintColor = [UIColor whiteColor];
มันใช้งานได้ถ้าคุณตั้งเป็นรหัส 'เพราะตัวเรียกสีไม่ทำงานในเครื่องมือสร้างส่วนติดต่อ (Xcode 6.1.1) มันเหมาะสมดีโดยไม่จำเป็นต้องเปลี่ยนพร็อกซีลักษณะใด ๆ
การตั้งค่าtintColor
สำหรับUITextField
การUITextView
ทำงานแตกต่างกัน ในขณะที่UITextField
คุณไม่จำเป็นต้องเรียกรหัสเพิ่มเติมหลังจากการปรับปรุงtintColor
เพื่อเปลี่ยนสีเคอร์เซอร์ แต่สำหรับUITextView
คุณ
ดังนั้นหลังจากการตั้งค่าtintColor
สำหรับUITextView
(มันไม่ได้เรื่องใน IB หรือในรหัส) คุณต้องโทรtextView.tintColorDidChange()
ในการสั่งซื้อที่จะใช้มัน (จริงๆแล้วมันจะผ่านการตั้งค่ามุมมองข้อความลงไปลำดับชั้น subviews ของมัน)
สิ่งนี้ใช้ได้กับฉันอย่างรวดเร็ว:
UITextField.tintColor = UIColor.blackColor()
คุณสามารถตั้งค่านี้ในกระดานเรื่องราว: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
วิธีการทั่วไปที่มากกว่านั้นก็คือการตั้งค่า tintColor ของ UIView
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
เหมาะสมถ้าคุณใช้องค์ประกอบ UI เริ่มต้นมากมาย
[UIView appearance]
ลองใช้งานได้สำหรับฉัน
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
เป็นไปได้โดยเข้าถึงคุณสมบัติส่วนตัวและดังนั้นอาจทำให้แอป Apple AppStore ถูกปฏิเสธ
วิธีการของ Durgesh ทำงาน
ฉันยังใช้โซลูชั่น KVC ดังกล่าวหลายครั้ง แม้จะดูเหมือนว่าจะไม่มีเอกสาร แต่ก็ใช้งานได้ ตรงไปตรงมาคุณไม่ได้ใช้วิธีการส่วนตัวใด ๆ ที่นี่ - เฉพาะการเข้ารหัสคีย์ - ค่าซึ่งถูกกฎหมาย
ป.ล. เมื่อวานนี้แอปใหม่ของฉันปรากฏที่ AppStore โดยไม่มีปัญหากับวิธีการนี้ และมันไม่ใช่กรณีแรกเมื่อฉันใช้ KVC ในการเปลี่ยนคุณสมบัติแบบอ่านอย่างเดียว (เช่น navigatonBar) หรือ ivars ส่วนตัว
สำหรับรุ่นเครื่องมือสร้างส่วนต่อประสานที่มี Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
ถ้าUITextField
เป็นจากUISearchBar
นั้นก่อนได้รับtextField
จากsearchBar
และจากนั้นใช้tintColor
คุณสมบัติ:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
สวิฟต์ 4
ใน viewDidLoad () เพียงแค่เรียกรหัสด้านล่าง:
ตัวอย่างโค้ด
//txtVComplaint is a textView
txtVComplaint.tintColor = UIColor.white
txtVComplaint.tintColorDidChange()
ฉันคิดว่าถ้าคุณต้องการสีที่กำหนดเองคุณสามารถไปที่Assets.xcassets
โฟลเดอร์คลิกขวาและเลือกNew Color Set
เมื่อคุณสร้างสีที่คุณตั้งไว้ให้ตั้งชื่อเพื่อใช้ซ้ำ
และคุณสามารถใช้มันได้เช่นนี้
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
ทดสอบบน macOS 10.15 / iOS 13 / Swift 5
สำหรับผู้ที่ค้นหาสิ่งที่เทียบเท่าใน SwiftUI สำหรับTextfield
สิ่งนี้คือaccentColor
:
TextField("Label", text: $self.textToBind).accentColor(Color.red)
UITextField
รวมถึงวิธีการทำเช่นนี้ในเครื่องมือสร้างส่วนติดต่อที่stackoverflow.com/a/18759577/1709587