2017-08-23 10 views
0

私はこの情報を持つ配列を取ろうとしています:["Concert"、 "Coachella"、 "Date"]そして選択された配列のテキストをボタンのテキストに変換してください。だから私は、配列の "日付"オプション(テーブルビューで提示)を選択すると、そのデータを私の最初のVCに戻す必要がありますどこのテキスト "日付"がボタンのテキストとして表示されます。何らかの理由で[String]からStringを抽出できないようです。その文字列を抽出すると、その文字列をUIButtonのタイトルテキストとして設定できます。ここで文字列の配列からテキストを取り出し、それをボタンのテキストとして使用するにはどうすればよいですか?

は、テーブルビューオプションを表示し、ユーザーがオプションを選択し、そのデータを別のVCに送信されますどこのコードです:

var delegate : SentDataBack? 

@IBOutlet weak var occasionsTableView: UITableView! 
@IBOutlet weak var occasionSearchBar: UISearchBar! 

var addedOccasions = ["Coachella", "Concert", "Date"] 

var index = 0 

var selectedCell = [""] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    occasionsTableView.delegate = self 
    occasionsTableView.dataSource = self 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = occasionsTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

    //let addedOccasions = ["Coachella", "Concert", "Date"] 

    cell.textLabel?.text = addedOccasions[indexPath.row] 

    cell.textLabel?.highlightedTextColor = UIColor(red: 255/255, green: 77/255, blue: 91/255, alpha: 1) 

    return cell 
} 

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

    return(addedOccasions.count) 

} 

// need to create a method that determines what happens when you click on a cell. what it should do is highlight its text then either store that name into a variable or return what cell text was selected to the data sent back method 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    index = indexPath.row 

    selectedCell = [addedOccasions[index]] 

} 

@IBAction func doneButtonPressed(_ sender: Any) { 

    delegate?.dataSentBack(occasionSentBack: selectedCell) 
    // sends back selected option 
    dismiss(animated: true, completion: nil) //can also add a function in here where it says nil, if you want something to happen upon completion of dismiss 
} 

そしてここでは、データとをすることになっていることを受けてのコードです選択された[文字列]のテキストを表示するボタンを操作する:

func dataSentBack(occasionSentBack: [String]) { 

configureAddedOccasionButton(selectedOccasion: occasionSentBack) 

    // once you get back whatever data is sent back which should be one event, then this area should add that button as selected to the filter list and possibly should add occasion name to occasion array list 
} 

func configureAddedOccasionButton(selectedOccasion : [String]) { 

    //set look of occasion button 
    addedOccasion.isHidden = false 
    addedOccasion.titleLabel?.text = selectedOccasion.description 
    addedOccasion.frame = CGRect(x: 86, y: 33, width: 70, height: 43) 
    buttonSelected(buttonPressed: addedOccasion) 

} 
+0

はどうもありがとうfirstVC –

答えて

0

selectedOccasionはあなたのデリゲートに渡すインデックスによって配列からテキストを取得する必要があり、文字列の配列がある場合にもsetButtonタイトルに問題

var delegate : SentDataBack? 

    @IBOutlet weak var occasionsTableView: UITableView! 
    @IBOutlet weak var occasionSearchBar: UISearchBar! 

    var addedOccasions = ["Coachella", "Concert", "Date"] 

    var index = 0 

    var selectedCell = "" 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     occasionsTableView.delegate = self 
     occasionsTableView.dataSource = self 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = occasionsTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 

     //let addedOccasions = ["Coachella", "Concert", "Date"] 

     cell.textLabel?.text = addedOccasions[indexPath.row] 

     cell.textLabel?.highlightedTextColor = UIColor(red: 255/255, green: 77/255, blue: 91/255, alpha: 1) 

     return cell 
    } 

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

     return(addedOccasions.count) 

    } 

    // need to create a method that determines what happens when you click on a cell. what it should do is highlight its text then either store that name into a variable or return what cell text was selected to the data sent back method 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     index = indexPath.row 

     selectedCell = addedOccasions[index] 

    } 

    @IBAction func doneButtonPressed(_ sender: Any) { 

     delegate?.dataSentBack(occasionSentBack: selectedCell) 
     // sends back selected option 
     dismiss(animated: true, completion: nil) //can also add a function in here where it says nil, if you want something to happen upon completion of dismiss 
    } 

//////////

func dataSentBack(occasionSentBack: String) { 

    configureAddedOccasionButton(selectedOccasion: occasionSentBack) 

    // once you get back whatever data is sent back which should be one event, then this area should add that button as selected to the filter list and possibly should add occasion name to occasion array list 
} 

func configureAddedOccasionButton(selectedOccasion : String) { 

    //set look of occasion button 
    addedOccasion.isHidden = false 
    addedOccasion.setTitle(selectedOccasion,for: .normal) 

    addedOccasion.frame = CGRect(x: 86, y: 33, width: 70, height: 43) 
    buttonSelected(buttonPressed: addedOccasion) 

} 
+0

で呼ばれViewWilApppear第二のコントローラを却下した後としてFirstVcでWillAppearまたはDIdAppearでボタンのテキストを設定しました!もう1つの質問:コードを実装しましたが、UIButtonにテキストを表示しています。しかし、単に日付という単語を表示するのではなく、テキストを["Date"]として表示します。どのようにこれを修正するための任意のアイデア? –

+0

結果をユーザに提示するために配列に対して 'description'を使用しないでください。 – rmaddy

+0

@ ShaliniSingh check update –

関連する問題