3

[MyTableviewController.tableview reloaddata]UITableViewの関数を呼び出そうとしています。そのための最適な場所は -(void) viewWillAppear、UITableViewControllerサブクラスのメソッドであると考えました。

クラスの作成時にコードが作成されなかったため、メソッドを実装しようとしましたが、ほとんど成功しませんでした。

SOや他のさまざまなWebサイトを調査した結果、UIViewControllerサブクラスがNavigation Controllerの一部であり、NavigationControllerがTabBarControllerの一部であることが問題である可能性があるというヒントが見つかりました。投稿された一般的な提案とコードは、コントローラーの1つ(どれ?)をサブクラス化し、-viewWillAppearメッセージを実装することでした。

私の質問は次のとおりです。1。別のコントローラーをサブクラス化せずに、この非常に必要なメソッドを呼び出す方法はありますか?2.もしそうなら、どうすればいいですか?3.そうでない場合は、私がしなければならないこと、そしてさらに重要なことに、なぜ私がそれをしなければならないのかを正確に説明していただけますか?

UITableViewControllerの完全なコードは次のとおりです。

//
//  OverViewController.m
//  NoificationTest
//
//  Created by Mirko Winckel on 15.03.12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "OverViewController.h"
#import "SecondOverViewController.h"
#import "Globals.h"

@interface OverViewController ()

@end

@implementation OverViewController

@synthesize entrys;



- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    if (self) {
        // Custom initialization
    }
    return self;
}



- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView reloadData];

    if (entrys == nil) 
    {

    NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString* fileName = [[Globals sharedGlobals].selectedProject stringByAppendingString:@".csv"];
    NSString* fileAtPath = [filePath stringByAppendingPathComponent:fileName];
    NSString* content = [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding];
    NSString *stringToFind =@"\n";
    entrys = [content componentsSeparatedByString:stringToFind];

    }


    /* Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;*/
}

- (void)viewDidUnload{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

    int weeks = 1+1;

    return weeks;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

    NSString *sectionHeader = nil;

    if ( section == 0 ) {

       sectionHeader = @"Refresh - test";

    }

    if (  section == 1 ) {
        if ( [Globals sharedGlobals].selectedProject != nil){

            NSString* temp = @"Current in project ";
            [temp stringByAppendingString:[Globals sharedGlobals].selectedProject];

            sectionHeader = temp;

        }

        else {
            sectionHeader = @"No project selected";
        }
    }

    if (  section == 2 ) {
        sectionHeader = @"Week 3";
    }

    if (  section == 3 ) {
        sectionHeader = @"Week 4";
    }

    if (  section == 4 ) {
        sectionHeader = @"Week 5";
    }

    return sectionHeader;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int rows;

    if (section == 0){
        rows = 1;
    }

    if (section == 1 ){
        rows = [entrys count] -1;
    }



    return rows ;
}

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

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

    NSString *oneLine = [entrys objectAtIndex:indexPath.row];
    NSArray *lineComponents = [oneLine componentsSeparatedByString:@";"];

    cell.textLabel.text = [lineComponents objectAtIndex:0];
    cell.textLabel.textColor = [UIColor colorWithRed:0.0 green:0.8 blue:0.2 alpha:1.0];

    return cell;
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

#pragma mark - Table view delegate



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{



    if (indexPath.section == 0) {

        [self.tableView reloadData];

        [tableView deselectRowAtIndexPath:indexPath animated:YES];



    }






    if (indexPath.section == 1) {

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    SecondOverViewController *anotherViewController = [[SecondOverViewController alloc] initWithStyle:UITableViewStylePlain];

    NSArray *rowArray = [[entrys objectAtIndex:indexPath.row] componentsSeparatedByString:@";"];

    anotherViewController.oneRow = rowArray;

    [self.navigationController pushViewController:anotherViewController animated:YES];

    } 





    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */

}

@end

前もって感謝します :)

4

1 に答える 1

1

ViewController が UITableViewController から派生している場合は、次の方法で reloadData 関数を呼び出してみてください。

[self.tableView reloadData];

また、 viewDidAppearではなく、viewDidLoadの下で reloadData を呼び出すことをお勧めします。後者は予期せずに複数回呼び出される可能性があります (たとえば、別のビューがスタックからポップされた場合)、前者は 1 回だけ呼び出されます。

例えば:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView reloadData];
}
于 2012-05-18T12:20:24.477 に答える