2017-02-23 25 views
1

У меня есть несколько кнопок. Каждая кнопка содержит метку языка.Swift3 Несколько кнопок динамического кодирования для события триггера

Я хочу сделать так, чтобы при нажатии на кнопку выбранная метка языка меняла свое значение в соответствии с нажатой кнопкой.

Выбранная языковая розетка называется SelectedLangText.

Простым решением было бы создать несколько выходов для каждой кнопки и установить значение метки SelectedLangText. Однако, если бы было 100 кнопок, это было бы плохое кодирование.

Я не уверен, как подойти к этой ситуации в Swift 3, исходя из веб-разработки.

enter image description here

+0

Вы должны попытаться создать tableView, используя динамический контент вместо статического содержимого. Это позволит вам поддерживать неограниченное количество языков. В совете используется более низкий случай верблюда при вводе имен переменных и методов в iOS. Я напишу ответ через секунду. Я работаю с предположением, что вы знаете, как работать с UITableViewDataSource и знаете, как создать пользовательскую ячейку. – DatForis

ответ

1

Я предпочитаю использовать шаблон проектирования делегата, когда речь идет о решении вопроса, как, что для него я считаю, что это будет намного чище подходом, чем просто сумма масс @IBActions

1- Создать Язык класса импорта Фонд

class Language { 
    var id: Int 
    var name: String 
    init(id: Int, name: String) { 
     self.id = id 
     self.name = name 
    } 
} 

2- Создайте пользовательскую ячейку в раскадровке или пером, а затем добавить соответствующие выходы и действия. А затем создать протокол делегата для него

import UIKit 
protocol CustomCellDelegate: class { 
    func customCell(newLanguageSelected language: Language) 
} 
class CustomCell: UITableViewCell { 
    var language: Language! 
    @IBOutlet weak var languageTextLabel: UILabel! 
    weak var delegate: CustomCellDelegate? 
    func setupCustomCell(withLanguage language: Language){ 
     self.language = language 
     self.languageTextLabel.text = self.language.name 
    } 
    @IBAction func buttonPressed(sender: UIButton){ 
     delegate?.customCell(newLanguageSelected: self.language) 
    } 
} 

3- Наконец, добавьте реализацию в методе cellForRow в UITableViewDataSource и добавить реализацию делегата в классе UITableViewController

import UIKit 
class YourTableViewController: UITableViewController{ 
    var languages: [Language] = [] 

    //implement the other methods in the dataSource 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "reuse", for: indexPath) as! CustomCell 
     cell.delegate = self 
     cell.setupCustomCell(withLanguage: languages[indexPath.row]) 
     return cell 
    } 
} 
extension YourTableViewController: CustomCellDelegate{ 
    func customCell(newLanguageSelected language: Language) { 
     //Do what you will with the language 
    } 
} 

Успехов

+0

Это похоже на экстремальный перебор для чего-то такого, что не соответствует задаче. Мне действительно нужен такой код? –

+0

Это правильный способ сделать это, если вы хотите иметь много ячеек. И это также лучше для людей, читающих код. Он обеспечивает более элегантный и четкий подход. – DatForis

-1

Вы можете добавлять метки к каждой кнопке и установить ту же IBAction для всех кнопок.

Сначала в вашем методе введите язык на основе кнопки. Теперь используйте цикл (идите с циклом, так как вам понадобится соответствующий индекс для каждой кнопки) и получите все кнопки из своего тега и установите языковой тег.

Немного сложный взгляд, но решит вашу проблему и хорошее решение в моем глазу.

for index in 101...103 { 
     let myBtn = self.view.viewWithTag(index) as! UIButton 
     myBtn.setTitle("localisedtitle string", for: .normal) 
} 
+0

Где я могу добавить теги? Это идентификатор? –

+0

Извините, я действительно застрял на том, с чего начать. Я еще не научился Свифт. Не могли бы вы предоставить пример фрагмента кода? –

+0

В построителе интерфейса, в свойствах кнопок ... или вы можете генерировать кнопки также запускать время, если у вас много записей или просто перейдите в виде таблицы. –

Смежные вопросы