4

以下のコードは機能しますが、希望どおりではありません。UIbuttonをクリックすると、古い値ではなくUITableviewの新しい値が自動的に更新されます。以下のコードは、UIbuttonsを押したときにのみ機能し、その後UITableviewをスクロールすると更新されます。新しい値を持つUItableview。私のアプリケーションでは、UITableviewをmainclass.asのサブクラスとして使用しています。画像を以下に示します。

ここに画像の説明を入力してください

このようにtestingViewController.hで「testingViewController」であるTableviewをメインクラスに追加します

#import "Inputtableview.h"
@interface testingViewController :UIViewController<UITableViewDelegate,UITableViewDataSource> {
     Inputtableview *inputview;
     IBOutlet UITableView *inputtbl; 
}
@end

testsViewController.mで

- (void)viewDidLoad {
btn1bool=FALSE;
if (inputview == nil) {
    inputview = [[Inputtableview alloc] init];
}

[inputtbl setDataSource:inputview];
[inputtbl setDelegate:inputview];
inputview.view = inputview.tableView;
}

今ボタンアクションメソッドで

-(IBAction)input:(id)sender
  {
  btn1bool=TRUE;
}

私のサブクラスコード「inputtableview.m」を以下に示します

- (void)viewDidLoad {
 [super viewDidLoad];
listOfItems=[[NSMutableArray alloc] initWithObjects:@"Iceland",@"Greenland",@"Switzerland",
             @"Norway",@"New Zealand",@"Greece",@"Italy",@"Ireland",nil];

  array1 = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H", nil] ;
 }

  #pragma mark -
  #pragma mark Table View datasource methods
-(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
    {
    if (btn1bool) {
        return [array1 count];
    }
else {
    return [listOfItems count];
}

[self.tableView reloadData];
   }


 -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
   {
static NSString *CellIdentifier = @"CellIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

NSLog(@"Row: %i", indexPath.row);
if (btn1bool) {
    NSString *cellValue = [array1 objectAtIndex:indexPath.row];
    cell.text = cellValue;
}
else {
    NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
    cell.text = cellValue;
      }
   return cell;
 }

どんな助けでも適用されます。

4

1 に答える 1

1

次のコードを入力するだけです。

[inputtbl reloadData];

プロジェクトで変更する必要があることがいくつかありますが、このプロジェクトはテスト用であると思います。


ボタンを押した後に日付をリロードする必要があるため、IBActionでメソッドを呼び出します。

-(IBAction)input:(id)sender
{
    btn1bool=TRUE;
    [inputview.tableView reloadData];
}

ボタンが押されたときに2つのデータソースを切り替えるには、次のコード行に変更できます。btn1bool=!btn1bool;

(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    if (btn1bool) {
        return [array1 count];
    } else {
        return [listOfItems count];
    }
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath正しい

于 2012-11-09T17:31:09.900 に答える