2016-08-30 82 views
0

我在Interface Builder中設計了一個自定義單元。 enter image description hereUIStepper值增加隨機數

這是一個電子商務購物車應用程序的可重複使用的單元格。問題在於UIStepper.I可以根據用戶添加到購物車的項目數來確定任意數量的這些單元格。所以問題是如果我遞增單元格1,2和3的步進值單元格4的值將從某個隨機數開始,而不是從一個隨機數開始。目前,我從.plist文件讀取值,並創建了一個產品模型並將其保存到模型中並創建一個產品模型數組。數據顯示在數組中。我創建了一個委託,用於從定製單元格獲取值到視圖控制器。步進值更改函數如下所示。

- (IBAction)valueChangedAction:(UIStepper *)sender { 
    NSLog(@"sender.value ---------- %f",sender.value); 
    self.stepperCount = sender.value; 

    self.cartItemQuantityLabel.text=[NSString stringWithFormat:@"%ld",(long)self.stepperCount]; 
    [self.delegate valueDidChangeStepper:self.stepperCount cellRow:self.cellRow]; 
} 

View Controller中函數的實現如下。

-(void)valueDidChangeStepper:(NSInteger)valueofStepper cellRow:(NSInteger)cellRow 
{ 
    ProductModel *productModel=[productsArray objectAtIndex:cellRow]; 
    productModel.cartItemQuantity=[NSString stringWithFormat:@"%d",valueofStepper]; 
    NSLog(@"stepper value %d from row %d",valueofStepper,cellRow); 
} 

該值在產品型號中更新。 例如。如果我在單元格1中選擇數量8,單元格2中選擇數量5,單元格3中選擇數量7,如果我在單元格4中增加一個值,它將從1直接跳到某個隨機值,如10左右。 編輯:的cellForRowAtIndexPath方法如下

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

static NSString *cartItemCellIdentifier [email protected]"CartItemCell"; 
     CartItemCell *cartItemCell =[self.cartTableView dequeueReusableCellWithIdentifier:cartItemCellIdentifier]; 
     if(itemsArray) 
     { 
      ProductModel *productFromArray=[productsArray objectAtIndex:indexPath.row]; 
      cartItemCell.cartItemNameLabel.text=productFromArray.cartItemName; 

      cartItemCell.cartItemQuantityLabel.text=productFromArray.cartItemQuantity; 

      cartItemCell.cartItemCostLabel.text=productFromArray.cartItemCost; 

      cartItemCell.cartItemImage.image=[UIImage imageNamed:productFromArray.cartItemImage]; 

      cartItemCell.cellRow=indexPath.row; 




      cartItemCell.delegate=self; 
     } 
     return cartItemCell; 

    } 

我設置cellrow作爲方法indexpath.row itself.So我得到的,其步進爲clicked.But仍然我得到的隨機值。

+0

請勿通過' cellRow'到你的委託方法,傳遞單元格(即'self'),然後在委託方法中使用'indexPathForCell'來確定哪一行受到影響 – Paulw11

回答

0

你幾乎可以肯定沒有完全配置你的單元格cellForRowAtIndexPath,並且正在從循環單元格中提取陳舊值。在所有情況下,您是否將步進值設置爲零?

發佈您的代碼cellForRowAtIndexPath

而且,正如Paulw11在他的評論中指出的那樣,無論您點擊哪個單元的步進器,實例變量cellRow都不能擁有正確的單元行。您需要使用步進器的原點來確定它所在的單元。(請參閱Chris對此問題的回答以獲取有關按鈕或其他控件的單元格索引路徑的信息:Detecting which UIButton was pressed in a UITableView

0

table viewcollection viewdequedeque該單元格,並重新使用單元格,而不是創建一個新的內存效率。所以,你必須用cellForRowAtIndexpath方法來管理tableview數據源。從第四行開始,您將得到隨機數據,這意味着您的第四個單元格將使用先前的單元格顯示。

因此,在您的情況下,您必須按照indexPath or row存儲步進器的值,並且必須對其進行管理cellforrowatindexpath

dequeueReusableCellWithIdentifier,請參閱apple文檔以獲取更多詳細信息。