2016-09-26 6 views
0

현재 ViewController이고 TableViewSelectedListItemsViewController입니다. 이 ViewControllerTableViewSelectedListItemsTableViewCell이라는 사용자 정의 셀 클래스로 채워집니다.UIStepper를 사용하여 영역 모델 객체의 속성을 변경하는 방법은 무엇입니까?

selectedListItems이라는 영역 모델 객체의 배열이 있는데, 각각은 여러 속성이 있습니다. SelectedListItemsTableViewCell은 속성이 이고 그 값이 인 개체이며, 각 행의 문자 수는 UIStepper이며 그 옆에 UILabel이 있으며 그 행 옆에는 (현재) 각 행에 UIStepper.value이 표시되어 있습니다. 이상적으로 레이블에는 각 행의 listItemWeight 속성이 반영되고 해당 행을 증가 또는 감소시킬 때 변경하십시오.

class SelectedListItemsTableViewCell: UITableViewCell { 

    @IBOutlet var selectedListItemLabel: UILabel! 
    @IBOutlet weak var listItemWeightLabel: UILabel! 
    @IBOutlet weak var stepperControl: UIStepper! 

    @IBAction func stepperValueChanged(sender: UIStepper) { 

     listItemWeightLabel.text = Int(sender.value).description 

    } 
} 

그리고 내 ViewControllercellForRowAtIndexPath에서

, 내가 지금처럼 셀을 구성한 : 완벽 listItem 속성을로드

// Configure the cell... 
    cell.selectedListItemLabel.text = selectedListItems[indexPath.row].listItem 

    cell.listItemWeightLabel.text = "\(selectedListItems[indexPath.row].listItemWeight)" 

하고

이 내 정의 셀입니다 listItemWeight 속성이 올바르게 표시되지만 UIStepper에서 증가 또는 감소하면 즉시 엉망이됩니다.

내 UILabel과 UIStepper를 [indexPath.row].listItemWeight에 올바르게 연결하려면 어떻게해야합니까?

답변

0

위의 대답은 내 문제의 실제 솔루션에 저를지도에 도움이되었다,하지만 미래에 누군가가 호기심 경우 - 나는 클로저를 사용하여 끝났다. 내 사용자 정의 셀 클래스에서

, 나는

@IBAction func stepperValueChanged(sender: UIStepper) { 

    selectedListItemLabel.text = Int(sender.value).description 
    tapped?(self) 

} 

을했고, 내보기 컨트롤러에, 나는 나 각 셀의 UIStepper 뷰 컨트롤러 파일에 액세스 할 수
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! SelectedListItemsTableViewCell 

    cell.stepperControl.value = selectedListItems[indexPath.row].listItemWeight 

    // Configure the cell... 

    cell.tapped = { (selectedCell) -> Void in 

     selectedListItems[indexPath.row].listItemWeight = cell.stepperControl.value 

    } 

했다.

플래시 어드밴티지의 옵션 2 답변을 this thread에 읽는 데 도움이되었습니다.

0

스테퍼 업데이트시 호출되는 것과 같은 방법으로 listItem을 업데이트하십시오. 그러나이 항목은 영역 데이터베이스에 저장되므로 영역 데이터베이스의 인스턴스를 가져 와서 데이터베이스에 변경 사항을 기록해야합니다.

TableItCell을 listItem의 인스턴스에 보유하면이 작업을 수행 할 수 있습니다. 새 TableViewCell 클래스는 다음과 같이 표시됩니다

class SelectedListItemsTableViewCell: UITableViewCell { 

    @IBOutlet var selectedListItemLabel: UILabel! 
    @IBOutlet weak var listItemWeightLabel: UILabel! 
    @IBOutlet weak var stepperControl: UIStepper! 

    var listItem: Item? 

    @IBAction func stepperValueChanged(sender: UIStepper) { 
     listItemWeightLabel.text = Int(sender.value).description 
     if let listItem = listItem { 
      let realm = try! Realm 
      try! realm.write { 
       listItem.listItemWeight = Int(sender.value) ?? 0 
      } 
     } 
    } 
} 
+0

입력 해 주셔서 감사합니다. Nathan! 나는 UIStepper가 update (stepperValueChanged) 메소드를 사용하여 listItem을 업데이트 할 수 없다는 것을 알고있다. (프로그래밍에 익숙하지 않아서 많이 언급하지는 않지만) 액세스하려면 indexPath.row가 필요하다. 그 특정 개체의 속성, 나는 사용자 지정 셀 클래스에 없는데. 그 앞에서 틀렸어? selectedListItems '속성을 드릴 다운하려고 할 때마다'SelectedListItemsTableViewCell'에 (해당 배열의) listItem에 대한 참조가있는 경우 'Value of type'[RealmListItem] '멤버가 없습니다.'listItemWeight ' " – MachTurtle

+0

당신은 그것을 업데이트 할 수 있어야합니다. –

+0

정말 끔찍한 질문인데 죄송 합니다만, 행의 속성에서 객체를 업데이트 할 수있는 방식으로 내'SelectedListItemsTableViewCell'에서 배열 (전역)을 참조하는 방법은 무엇입니까? 나는 지난 20 분 동안 검색을 해왔지만 Google은 여기서 말하는 의미와 다른 방식으로 '참조'를 해석합니다. – MachTurtle