2015-12-19 4 views
0

Я уже реализовал PickerView, но я хочу настроить его как приложение Alarm Clock.Custom PickerView iOS

enter image description here

Вы можете видеть, что каждый компонент имеет ряд «Час» или «Минута». Я хочу установить «Час» и «Минут», чтобы стоять здесь, и каждый элемент, который не выбран, у них нет «Часа» или «Минуты», только тот, который выбран, имеет «Час» или «Минуту», , Как это сделать?

Вот мой код:

import UIKit 

class StoryAddViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

    @IBOutlet var titleTextField: TextField! 
    @IBOutlet var hashtagsTextField: TextField! 
    @IBOutlet var createButton: UIButton! 
    @IBOutlet var timePickerView: UIPickerView! 
    var timePickerDataBase = [ ["1", "2" , "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], ["1", "2" , "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26" , "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59"] ] 
    var hour = String() 
    var minute = String() 

    var story: Story? 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    title = "Add new story" 
    view.backgroundColor = Colors.primaryBackgroundColor 
    (tabBarController as! SLTabBarController).toggleTabBar(animated: false, showed: false) 

    createButton.backgroundColor = Colors.tintColor 
    createButton.tintColor = UIColor.whiteColor() 
    } 

    override func viewWillAppear(animated: Bool) { 
    if story == nil { 
     story = Story.create(getDatabase()) 
    } 

    titleTextField.text = story?.title 
    hashtagsTextField.text = story?.hashtags.joinWithSeparator(", ") 
    super.viewWillAppear(animated) 
    } 

    override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    (tabBarController as! SLTabBarController).toggleTabBar(animated: true, showed: true) 
    } 

    @IBAction func handleViewTap(sender: AnyObject) { 
    view.endEditing(true) 
    } 

    @IBAction func handleCreateButtonTap(sender: UIButton) { 
    story?.title = titleTextField.text! 
    story?.hashtags = hashtagsTextField.text!.split("\\s*,\\s*") 

    try! story?.save() 
    navigationController?.popViewControllerAnimated(true) 
    } 

// MARK: handle picker view 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return timePickerDataBase.count 
    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return timePickerDataBase[component].count 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return timePickerDataBase[component][row] 
    } 

    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 
    let pickerLabel = UILabel() 
    pickerLabel.textColor = UIColor.blueColor() 
    if component == 0 { 
     pickerLabel.text = timePickerDataBase[component][row] + " Hour" 
     pickerLabel.font = UIFont(name: "Arial-BoldMT", size: 25) 
     pickerLabel.textAlignment = NSTextAlignment.Center 
    } else { 
     pickerLabel.text = timePickerDataBase[component][row] + " Minute " 
     pickerLabel.font = UIFont(name: "Arial-BoldMT", size: 25) 
     pickerLabel.textAlignment = NSTextAlignment.Center 
    } 
    return pickerLabel 
    } 

    func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat { 
    return 140 
    } 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    print(component) 
    print(row) 
    switch component { 
    case 0: 
     hour = timePickerDataBase[component][row] 
     print(hour) 
    case 1: 
     hour = timePickerDataBase[component][row] 
     print(minute) 
    default: 
     break 
    } 
    } 
} 
+0

Вы пытаетесь сказать, что только выбранное значение должно иметь «часы» и «минуты», а все остальные должны иметь только цифры? Если это так, я предлагаю вам сделать это по-другому, потому что обновление значений, пока оно вращается, не будет работать очень хорошо. – lzl

+0

Да, я имею в виду это. – Khuong

+0

Если вы хотите динамически обновлять значения, то проверьте мой ответ. В противном случае я бы предложил иметь один сборщик, затем метку «часы», затем еще одну метку и метку «минут» .... или, имеют первые и значения по умолчанию, такие как 0H: 0M, тогда остальные просто цифры – lzl

ответ

0

Я бы не предложить изменения значения полей динамически так, как я думаю, что вы пытаетесь сделать (это выглядело бы странно), но если вы действительно имели Вам необходимо перезагрузить все данные в

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    // reload the data source or save current value 
    pickerView.reloadAllComponents() // <---- use this to reload picker 
} 

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { 
    // setup the cells how you want to based on data source/current value 
}