2015-01-20 20 views
9

Tôi đang đấu tranh với điều này trong một thời bây giờ. Đã tìm kiếm ở khắp mọi nơi nhưng giải pháp được cung cấp chỉ hoạt động với mục tiêu-c. Trong đó bao gồm trongThay đổi nền của văn bản UISearchBarField

UITextField *txt = [_searchBar valueForKey:@"_searchField"];

Mặc dù một số có thể nói rằng đây được bảo vệ API và Apple có thể từ chối một ứng dụng với mã như vậy.

Vì vậy, bây giờ tôi đã thử rất nhiều cách để làm việc này và nó không hoạt động chút nào. Mã của tôi là thế này:

searchBar = UISearchBar(frame: CGRectMake(0, 0, 320.0, 30.0)) 
searchBar.autoresizingMask = UIViewAutoresizing.FlexibleWidth 
searchBar.searchBarStyle = UISearchBarStyle.Minimal 
searchBar.layer.cornerRadius = 15 
searchBar.delegate = self 

searchBar.backgroundColor = UIColor.whiteColor() 

if floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1{ 
    // Load resources for iOS 6.1 or earlier 
    searchBar.placeholder = "Search"; 
} else { 
    // The following "hack" (if we can call that) breaks the UI for different size devices. 
    // Load resources for iOS 7 or later 
    searchBar.placeholder = "Search           "; 
} 

này mang lại cho tôi kết quả kỳ lạ: enter image description here

Trong khi những gì tôi muốn chỉ là textfield bên trong UISearchBar để có một nền trắng và thanh tìm kiếm bản thân có một cornerRadius của , ví dụ: 15.

Tôi làm cách nào để thực hiện việc này?

Cảm ơn bạn rất nhiều trước

+0

UITextField * searchField = [SearchBar valueForKey: @ "_ searchField"]; searchField.textColor = [UIColor whiteColor]; Tôi đã sử dụng mã này trong ứng dụng và ứng dụng của mình đã có trong App Store .. – Bhoomi

Trả lời

22

Bạn phải truy cập UITextField bên trong UISearchBar. Bạn có thể làm điều đó bằng cách sử dụng valueForKey("searchField")

var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField 

textFieldInsideSearchBar?.textColor = yourcolor 
textFieldInsideSearchBar?.backgroundColor = backgroundColor 
... 

đó bạn có thể thay đổi bất kỳ thông số như Format hay backgroundColor của UITextField

+10

bạn nên đặt kiểu là 'Nổi bật' hoặc' Mặc định.' Nếu bạn thích sử dụng 'Minimal',' backgroundColor' không hoạt động. 'searchBar.searchBarStyle = UISearchBarStyle.Prominent // hoặc .Default' – fatihyildizhan

+1

@fatihyildizhan cảm ơn điều này thực sự thực sự quan trọng KHÔNG sử dụng kiểu tối thiểu! đã dành quá nhiều thời gian cho việc này .... – Altimac

8

Thêm vào câu trả lời ở trên. Nếu bạn muốn giữ UISearchBarStyleMinimal thanh tìm kiếm phong cách và thay đổi nền của TextField UISearchBar của, thiết borderStyle của TextField để UITextBorderStyleNone

Objective C:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal; 

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"]; 
    txfSearchField.borderStyle = UITextBorderStyleNone; 
    txfSearchField.backgroundColor = yourColor; 
+0

Tôi đã tìm kiếm xung quanh. Đây là giải pháp thực sự hoạt động! – flame3

+0

Tôi đồng ý. Giải pháp này hoạt động khi 'UISearchBarStyle' được đặt thành' .minimal'. Thử nghiệm trên iOS 10.3 – yohannes

+0

Nó hoạt động, nhưng tại sao? –

7

Trong Swift 3:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField { 
     txfSearchField.borderStyle = .none 
     txfSearchField.backgroundColor = .lightGray 
    } 
Các vấn đề liên quan