2016-07-29 97 views
1

我在我的iOS應用程序中有一個mapView和一個UISearchBar來搜索位置並在其上居中。我的搜索結果通過自動完成完成,並顯示在tableView中。tableView.hidden打破其他元素

我遇到了麻煩,當我點擊取消時,它顯示我所有的數據在tableView

所以我實現了這個功能:

func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
    searchTableView.hidden = true 
} 

但是,這個功能的呈現,使這樣的:

enter image description here

我不知道(不知道如何看)如果我的mapView仍然在黑屏下。

順便說一句,如果我刪除了取消按鈕的功能,和搜索的東西,如果我點擊Cancel會顯示這樣的事情:

enter image description here

掩飾我tableView再次,我要再進行一次搜索,然後用小十字按鈕刪除它,然後取消。

我的代碼,自動完成搜索,就是這樣:

func initTableView() { 
    searchTableView.delegate = self 
    searchTableView.dataSource = self 
    searchTableView.scrollEnabled = true 
    searchTableView.hidden = true 
} 

func searchBarSearchButtonClicked() { 
    searchTableView.hidden = false 
    searchBar.resignFirstResponder() 
    dismissViewControllerAnimated(true, completion: nil) 
    searchBar(searchBar, textDidChange: searchBar.text!) 
} 

func searchBar(_searchBar: UISearchBar, textDidChange searchText: String) { 
    searchTableView.reloadData() 
    searchAutocompleteEntriesWithSubstring(searchText) 
} 

func searchAutocompleteEntriesWithSubstring(substring: String) { 
    searchBar.filtredDatas.removeAll(keepCapacity: false) 
    for curString in searchBar.datas { 
     let myString:NSString! = curString.title! as NSString 

     let substringRange :NSRange! = myString.rangeOfString(substring) 

     if (substringRange.location == 0) { 
      searchBar.filtredDatas.append(curString) 
     } 
    } 
} 

這是從我的ViewController.swift文件。 我的searchBar變量是一個自定義類,它包含NSArray數據和另一個fileterDatas

@IBOutlet weak var mapView: UGOMapController! 
@IBOutlet var searchTableView: UITableView! 
@IBOutlet weak var searchBar: UGOSearchBar! 

感謝您的幫助。 如果您需要更多我的代碼,我可以編輯這篇文章。

編輯:

這裏是我的UITableView功能,用於searchTableView

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return searchBar.filtredDatas.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let autoCompleteRowIdentifier = "AutoComplete" 
    var cell = tableView.dequeueReusableCellWithIdentifier(autoCompleteRowIdentifier) as UITableViewCell! 

    if cell != nil { 
     let index = indexPath.row as Int 
     if (searchBar.filtredDatas.count > 0) { 
     cell!.textLabel!.text = searchBar.filtredDatas[index].title 
     } 
    } 
    else { 
     cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: autoCompleteRowIdentifier) 
    } 
    return cell! 
} 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let selectedCell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! 
    searchBar.text = selectedCell.textLabel!.text 
} 

而我的等級制度:

enter image description here

而且我的viewController檢查:

enter image description here enter image description here

+0

您可以檢查在Xcode的看法層次:https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/ExaminingtheViewHierarchy.html 我也建議檢查是否' searchTableView'設置正確。 – fiks

+0

我剛剛檢查了視圖層次結構(感謝提示^^),但沒有,在那一點上一切正確...另一方面,我有我的numberOfRowInSection/cellForRowAtIndex ...函數。我對它們進行了定製,所以它是可能的,但是我很快就發現了它的真相。我應該把它放在帖子裏嗎? –

+0

是的,請。瞭解視圖層次結構以及如何設置插座可能會有所幫助 – fiks

回答

1

您有3個不同的出口連接到表視圖。

這意味着,當你隱藏的tableView,你還隱藏了看法,因爲它連接到同一Search Table View

你必須確保你的表視圖連接只是一個出口。

編輯

爲了更精確:

  1. 你必須從改變到的UITableViewController您的UIViewController視圖控制器。

  2. view outlet將連接到viewController的view屬性。

  3. tableView插座將被刪除,因爲在正常的UIViewController中該屬性不存在。 (它在UITableViewController中定義)

  4. SearchTableView應連接到您在視圖控制器中定義的searchTableView屬性。

+0

謝謝。但是,我如何將它們鏈接到其他視圖。或者更喜歡,我怎麼鏈接他們?我的tableView和我的searchTableView有兩個不同的東西嗎?我只是添加我可以製作的每個鏈接的圖片^^ –

+0

更新了我的回答:)希望它有幫助。 這篇文章對於如何在xib中的普通UIViewController中設置表視圖也很有幫助:https://www.weheartswift.com/how-to-make-a-simple-table-view-with- ios-8-and-swift/ – fiks

+0

但是,如果我將控制器更改爲UIView,我將無法覆蓋tableView函數。我應該在旁邊創建一個UITableViewController文件嗎? –