2014-01-13 50 views
-1

我基本上有兩種陣列,我想即一次在一個TableView中顯示:如何自定義cellForRowAtIndexPath TableView方法根據所採取的操作顯示不同來源的數據?

@property (nonatomic, strong) NSArray *items; 
@property (nonatomic, strong) NSArray *historicItems; 

其或者itemshistoricItems應在TableView中所示取決於所採取的行動。

選擇要顯示的數組的正確方法是什麼?要在TableView中顯示的單元格在cellForRowAtIndexPath:indexPath方法中準備。

+0

沒有。我的意思是數據源中有兩個數組。我希望表視圖顯示一個或另一個數組。 – ZviBar

+0

知道我的問題爲什麼被低估是很有趣的。 – ZviBar

回答

2

在你的類添加BOOL,並使它在你的行動真的還是假的,

//define in your .h or wherever you want to declare 

BOOL flag; 

,並比任何讓它在你的行動真的還是假的。比在CellForRowAtIndexPath這樣做,根據您的操作選擇數據源。

If (flag){ 
cell.textLabel.text=[items objectAtIndex:IndexPath.row]; 
} 
else{ 
cell.textLabel.text=[historicalItems objectAtIndexPath.row]; 
} 

,你也必須使用如果else語句相同的numberofcell函數返回來自這兩個數據源小區的數量爲好。

2

您可以添加布爾變量並根據所採取的操作對其進行更改。在您的表視圖的數據源方法做的東西取決於布爾變量,例如:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (action == YES) //your first action 
     return items.count; 
    else //second action 
     return historicItems.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Your code to init cell here 
    ....... 
    if (action == YES) //your first action 
    { 
     cell.textLabel.text = items[indexPath.row]; 
    } 
    else //second action 
    { 
     cell.textLabel.text = historicItems[indexPath.row]; 
    } 

    return cell; 
} 

希望這有助於

2

這樣來做:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     if (showItems) 
     { 
      return items.count; 
     } 
     else 
     { 
      return historicItems.count; 
     } 
    } 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     NSString *CellIdentifier = @"cell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
     } 
     if (showItems) 
     { 
      cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
     } 
     else 
     { 
      cell.textLabel.text = [historicItems objectAtIndex:indexPath.row]; 
     } 
     return cell; 
    } 
1

1路 如果兩個數組的內容相同,然後採取datasourcearray。然後copy將適當的數組數據轉換爲按鈕操作的數據源數組。

datasourcearray = [self.items copy]; 
[yourtable reloadData]; 

onther array的相似動作。

第二方式 如果兩個陣列包含不同的是再取一個布爾值(假設isFirstSenarioFlag) 肘值YES或NO按鈕按下。檢查每個數據源中的標誌值和委託方法,並在重新加載數據方法後加載表的相應數據。

在第一種方法中,您不需要關心設置標誌值,以檢查每個表數據源和委託方法中的數據源。此外,它還將減少程序的運行時複雜性(切換每種方法),並且也易於管理內存。 :)

2

取決於您可以選擇重新加載tableview與所需的項目的行動。使用任何布爾變量來跟蹤選擇哪個動作。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSInteger count; 
    if (isItems == YES) //your first action 
     count = items.count; 
    else { 
     count = historicItems.count; 
    } 

    return count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = dequeueReusableCellWithIdentifier:@"Cell"]; 

    if (isItems == YES) 
    { 
     cell.textLabel.text = items[indexPath.row]; 
    } 
    else 
    { 
     cell.textLabel.text = historicItems[indexPath.row]; 
    } 

    return cell; 
} 
相關問題