2017-07-19 25 views
1

我正在構建一個任務計時器應用程序,我正在用它來探索什麼可行,哪些行不通。我是初學者,我不知道如何解決這個問題。我想要發生的事情是,用戶能夠點擊一個表格行,該表格行直接延伸到定時器視圖控制器,並且可以點擊選定行中的字符串值顯示在定時器視圖控制器的標籤上。我試圖用幾種不同的方法來做到這一點,但不能把我的頭圍繞不同的技術。如何從一行中繼續並在新的視圖控制器中顯示該行的名稱?

下面是我的定時器

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var timerLabel: UILabel! 
@IBOutlet weak var pauseButton: UIButton! 
@IBOutlet weak var startButton: UIButton! 
@IBOutlet weak var timerTaskLabel: UILabel! 


var seconds = 10 
var timer = Timer() 
var isTimerRunning = false 
var resumeTapped = false 

@IBAction func cancel(_ sender: Any) { 
    dismiss(animated: true, completion: nil) 
} 

@IBAction func startButtonTapped(_ sender: Any) { 
    if isTimerRunning == false { 
     runTimer() 
     self.startButton.isEnabled = false 
    } 
} 

func runTimer() { 
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true) 
    isTimerRunning = true 
    pauseButton.isEnabled = true 
} 

@IBAction func pauseButtonTapped(_ sender: UIButton) { 
    if self.resumeTapped == false { 
     timer.invalidate() 
     self.resumeTapped = true 
     self.pauseButton.setTitle("Resume",for: .normal) 
    } else { 
     runTimer() 
     self.resumeTapped = false 
     self.pauseButton.setTitle("Pause",for: .normal) 
    } 
} 

@IBAction func resetButtonTapped(_ sender: Any) { 
    timer.invalidate() 
    seconds = 60 
    self.timerLabel.text = timeString(time: TimeInterval(seconds)) 
    if self.resumeTapped == true { 
     self.resumeTapped = false 
     self.pauseButton.setTitle("Pause",for: .normal) 
    } 
    isTimerRunning = false 
    pauseButton.isEnabled = false 
    startButton.isEnabled = true 
} 

func updateTimer() { 
    if seconds < 1 { 
     timer.invalidate() 
     //Send alert to indicate "time's up!" 
    } else { 
     seconds -= 1 
     timerLabel.text = timeString(time: TimeInterval(seconds)) 
    } 
} 

func timeString(time:TimeInterval) -> String { 
    let hours = Int(time)/3600 
    let minutes = Int(time)/60 % 60 
    let seconds = Int(time) % 60 
    return String(format:"%02i:%02i:%02i", hours, minutes, seconds) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    pauseButton.isEnabled = false 
    self.timerLabel.text = timeString(time: TimeInterval(seconds)) 
    // Do any additional setup after loading the view, typically from a nib. 
} 





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

視圖控制器,這裏是我的表視圖代碼

import UIKit 

class TaskListViewController: UITableViewController, 
AddNewTaskViewControllerDelegate { 

var tasks: [TaskData] 

required init?(coder aDecoder: NSCoder) { 

    tasks = [TaskData]() 

    let row0item = TaskData() 
    row0item.task = "learn French" 
    row0item.time = "500" 
    tasks.append(row0item) 

    super.init(coder: aDecoder) 
} 

//DELEGATE PROTOCOLS 
func addNewTaskViewControllerDidCancel(_ controller: AddNewTaskViewController) { 
    dismiss(animated: true, completion: nil) 
} 
func addNewTaskViewController(_ controller: AddNewTaskViewController, didFinishAdding item: TaskData) { 
    let newRowIndex = tasks.count 
    tasks.append(item) 
    print("\(item.time)") 

    let indexPath = IndexPath(row: newRowIndex, section: 0) 
    let indexPaths = [indexPath] 
    tableView.insertRows(at: indexPaths, with: .automatic) 

    dismiss(animated: true, completion: nil) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "AddTask" { 
     let navigationController = segue.destination as! UINavigationController 
     let controller = navigationController.topViewController as! AddNewTaskViewController 
     controller.delegate = self 
    } 
} 
//DELEGATE PROTOCOLS 



override func viewDidLoad() { 
    super.viewDidLoad() 

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

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

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 

    tasks.remove(at: indexPath.row) 

    let indexPaths = [indexPath] 
    tableView.deleteRows(at: indexPaths, with: .automatic) 
} 


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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "TaskListItem", for: indexPath) 

    let taskItem = tasks[indexPath.row] 
    let label = cell.viewWithTag(1) as! UILabel 
    label.text = taskItem.task 
    return cell 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

} 
} 

任何幫助將不勝感激。我希望這個問題是有道理的

回答

1

從我的理解,你想傳遞一個字符串值從一個視圖到另一個,當它繼續。一種方法是在定時器視圖控制器和其他視圖中創建一個字符串變量,然後將其放到定時器視圖中,然後將該變量設置爲該行的顯示文本。然後在定時器視圖控制器上,您可以使用該變量,因爲它是由調用該segue的人設置的。 (在重寫函數準備(segue ...)方法)

對不起,沒有寫任何代碼,我不在當前的環境,我可以。

+0

感謝這似乎工作到目前爲止...我只是得到一個錯誤的類型錯誤,當我嘗試將TaskData分配給UILabel – Tom

+0

經過一番努力,我得到它的工作,謝謝! – Tom

+0

非常歡迎! @湯姆 – TNguyen

相關問題