2016-09-16 1 views
0

VC1では、配列から文字列を抽出してVC2に送信しようとしています。私はprepareForSegueメソッドでこれを行います。prepareForSegue配列から抽出した間違った(遅延した)文字列を第2のビューコントローラに送信

  1. 私はタップROW1(りんご)VC1で、それはVC2に行くと
  2. タップ戻っVC 1から
  3. タップROW2をVC2でりんごを示し(バナナ:私はそれを実行したときしかし、タイムラグがあります)、文字列が私はROW3をタップバックVC1
  4. に VC2
  5. タップ(オレンジ)のリンゴとして渡すVC1にはVC2 に進み、
01などなどVC2 でバナナを示します

以下は私が使用しているコードです。誰かが私が間違っているところを私に見せてもらえると助けてくれると大変感謝しています。ありがとう..

class HomeSearchViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate { 

var filteredArray = [String]() 
var shouldShowSearchResults = false 
var searchController: UISearchController! 

var databaseRef = FIRDatabase.database().reference() 
var loggedInUser = AnyObject?() 
var loggedInUserData = AnyObject?() 


var productSearchArray = [AnyObject?]() 
var productBrandArray = [String]() 
var itemNameArray = [String]() 
var picUrlArray = [String]() 
var skuArray = [String]() 
var nextScreenRow = Int() 
var nextSceenRowNonSearch = Int() 
var toPass = String() 
var toPassSearch = String() 
var initialSearchList = ["Apple", "Samsung", "Windows", "Google"] 

    @IBOutlet weak var tblSearchResults: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     loadListOfCountries() 
     configureSearchController() 


     tblSearchResults.delegate = self 
     tblSearchResults.dataSource = self 
    } 

// MARK: Table Cells Stuff 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     if shouldShowSearchResults { 
      return filteredArray.count 
     } 
     else { 
      return initialSearchList.count 
     } 
    } 


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("homeSearchCell", forIndexPath: indexPath) as! HomeSearchTableViewCell 

     //note to self: need to pass on more than one variable for search 

     if shouldShowSearchResults { 

      cell.configure(filteredArray[indexPath.row], itemNameLabel: "text'", skuLabel: "TEXT") 
      //cell.textLabel?.text = filteredArray[indexPath.row] 
     } 
     else if shouldShowSearchResults == false{ 
      cell.configureNISearch(initialSearchList[indexPath.row]) 

     } 

     return cell 
    } 


    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 60.0 
    } 

//行とパス変数を見つける。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 


    //println("You selected cell #\(indexPath.row)!")spDetailSegue 
    if shouldShowSearchResults { 
     nextScreenRow = indexPath.row 

     // get to the next screen 
     self.performSegueWithIdentifier("spDetailSegue", sender: self) 

    } 
    else if shouldShowSearchResults == false{ 

     nextSceenRowNonSearch = indexPath.row 

     // get to the next screen 
     self.performSegueWithIdentifier("searchSegue", sender: self) 
    } 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 



    if (segue.identifier == "spDetailSegue") { 
     //Checking identifier is crucial as there might be multiple 
     // segues attached to same view 
     let detailVC = segue.destinationViewController as? pDetailViewController; 
     detailVC!.toPassSku = skuArray[nextScreenRow] 

     // print("vSku",) 
    } 
    if (segue.identifier == "searchSegue"){ 

     //print("selected indexpath = ", selectedIndex) 
     let detailVC = segue.destinationViewController as? SearchDetailViewController; 
     detailVC!.toPassSearch = initialSearchList[nextSceenRowNonSearch] 
    } 

} 

//検索バーのもの一度

func configureSearchController() { 
     // Initialize and perform a minimum configuration to the search controller. 

     searchController = UISearchController(searchResultsController: nil) 
     searchController.searchResultsUpdater = self 
     searchController.dimsBackgroundDuringPresentation = false 
     searchController.searchBar.placeholder = "Search here..." 
     searchController.searchBar.delegate = self 
     searchController.searchBar.sizeToFit() 
     //searchController.searchBar.scopeButtonTitles = ["Products", "Users"] 
     searchController.searchBar.barTintColor = UIColor.whiteColor() 
     searchController.searchBar.tintColor = UIColor.redColor() 
     // Place the search bar view to the tableview headerview. 
     tblSearchResults.tableHeaderView = searchController.searchBar 
    } 

    func searchBarTextDidBeginEditing(searchBar: UISearchBar) { 
     shouldShowSearchResults = true 
     tblSearchResults.reloadData() 
    } 


    func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
     shouldShowSearchResults = false 
     tblSearchResults.reloadData() 
    } 

    func searchBarSearchButtonClicked(searchBar: UISearchBar) { 
     if !shouldShowSearchResults { 
      shouldShowSearchResults = true 
      tblSearchResults.reloadData() 
     } 

     searchController.searchBar.resignFirstResponder() 
    } 

    func updateSearchResultsForSearchController(searchController: UISearchController) { 
     let searchString = searchController.searchBar.text 

     // Filter the data array and get only those countries that match the search text. 
     filteredArray = itemNameArray.filter({ (item_name) -> Bool in 
      let countryText: NSString = item_name 

      return (countryText.rangeOfString(searchString!, options: NSStringCompareOptions.CaseInsensitiveSearch).location) != NSNotFound 
     }) 

     // Reload the tableview. 
     tblSearchResults.reloadData() 
    } 

}

+1

コード内でnextScreenRowに値を割り当てる他の場所はありますか?より多くのコードがここで助けになるかもしれませんが、これは私には良いようです。 – Dallas

+0

コードを追加しています。あなたの質問に答えるために、変数として宣言しました。 'code'var nextScreenRow = Int() – gk103

+0

ファイルをメールで送ってもらえますか?私はそれを解決しようとしていませんが、ここで問題を見ることはできません。 – Dallas

答えて

0

@Lu_が示唆したように、

あなたはdidSelectRowAtIndexPathがprepareForSegue前に呼び出されていることを確認していますか?セルからコントローラーへのセグーアクションを入れなかったのですか?

これが問題を解決しました。ありがとう!

0

あなたdidSelectRowAtIndexPathからライン

tableView.deselectRowAtIndexPath(indexPath, animated: true) 

下に除去することでみてください。

+0

私はその行も問題だと思った。私は間違ってデリゲートメソッド "didDeselectRowAtIndexPath"の自動完了を使用する前に一度問題があったことを知っている – Dallas

+0

彼らはまだ起きている – gk103

関連する問題