Swift: 如何使用delegate
Swift: How use delegate
我有 AllOrganizacionUIView class,我使用了 UISearchBarDelegate 委托,在 workink
class AllOrganizacionUIView: UIView , UISearchBarDelegate {
@IBOutlet var SearchBar: UISearchBar!
var searchActive : Bool = false
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
aa.SearchBar.endEditing(true)
print("hajox")
}
}
我在 ViewController class、
中使用了 UISearchBarDelegate 委托
class ViewController: UIViewController{
@IBOutlet var SearchBar: UISearchBar!
// not working
func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
self.CircleImageView_3.image = UIImage(named: "FullCircle")
self.CircleImageView_2.image = UIImage(named: "Circle")
self.CircleImageView_1.image = UIImage(named: "Circle")
self.mMainCategory.hidden = true
self.mAllCategores.hidden = true
self.mAllOrganizations.hidden = false
self.FooterViewController.text = "Основные категории"
return true
}
}
请帮我解决这个问题。
您必须为您的搜索栏设置委托,可能在 viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
self.SearchBar.delegate = self
}
但如果将代理指向故事板而不是代码,效果会更好。
所以,我在您的代码中发现了两个问题。首先,你的意思是你的委托是一个 UIView
子类。但是你的意思是你想使用在 UIViewController
子类中实现的委托。
您只能同时拥有一名代表。选择一个(首选视图控制器),并在那里实现所有委托方法。然后按照我在回答开头所说的设置委托即可。
实际上,我建议您在 Apple 官方文档网站上阅读有关 protocols 和委托的内容。确实有必要仔细阅读文档,因为 iOS 中有很多与其他平台不同的独特之处。
覆盖 func viewDidLoad() {
super.viewDidLoad()
self.SearchBar.delegate = self
}
或在故事板中设置您的代表。
我有 AllOrganizacionUIView class,我使用了 UISearchBarDelegate 委托,在 workink
class AllOrganizacionUIView: UIView , UISearchBarDelegate {
@IBOutlet var SearchBar: UISearchBar!
var searchActive : Bool = false
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
aa.SearchBar.endEditing(true)
print("hajox")
}
}
我在 ViewController class、
中使用了 UISearchBarDelegate 委托 class ViewController: UIViewController{
@IBOutlet var SearchBar: UISearchBar!
// not working
func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
self.CircleImageView_3.image = UIImage(named: "FullCircle")
self.CircleImageView_2.image = UIImage(named: "Circle")
self.CircleImageView_1.image = UIImage(named: "Circle")
self.mMainCategory.hidden = true
self.mAllCategores.hidden = true
self.mAllOrganizations.hidden = false
self.FooterViewController.text = "Основные категории"
return true
}
}
请帮我解决这个问题。
您必须为您的搜索栏设置委托,可能在 viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
self.SearchBar.delegate = self
}
但如果将代理指向故事板而不是代码,效果会更好。
所以,我在您的代码中发现了两个问题。首先,你的意思是你的委托是一个 UIView
子类。但是你的意思是你想使用在 UIViewController
子类中实现的委托。
您只能同时拥有一名代表。选择一个(首选视图控制器),并在那里实现所有委托方法。然后按照我在回答开头所说的设置委托即可。
实际上,我建议您在 Apple 官方文档网站上阅读有关 protocols 和委托的内容。确实有必要仔细阅读文档,因为 iOS 中有很多与其他平台不同的独特之处。
覆盖 func viewDidLoad() {
super.viewDidLoad()
self.SearchBar.delegate = self
}
或在故事板中设置您的代表。