Как перезагрузить табличное представление после редактирования источника данных (массива) контроллером Modal View - PullRequest
1 голос
/ 20 января 2010

Привет, у меня был этот вопрос, UITableView Не обновляется после того, как Modal View Controller отклоняет

Но, похоже, я не получил прямой ответ,

Может кто-нибудь ещепролить немного света?

Вот код.

FirstViewController.h

@interface FirstViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

NSMutableArray *routines;
IBOutlet UITableView *myTableView;

}

 @property (nonatomic, retain) NSMutableArray *routines;
 @property (nonatomic, retain) UITableView *myTableView;

- (IBAction)showNewEventViewController;   

@ end

и его .m

#import "FirstViewController.h"
#import "NewEventViewController.h"

@implementation FirstViewController

@synthesize routines, myTableView;


- (void)viewWillAppear:(BOOL)animated{
[myTableView reloadData];
NSLog(@"Routines: %@", routines);
NSLog(@"refreshed!");

for(int i = 0; i < [routines count]; i++){

    NSLog(@"%@", [routines objectAtIndex:i]);

          }

 }  




- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [routines count];

}


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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
NSString *cellValue = [routines objectAtIndex:indexPath.row];
[cell.textLabel setText:cellValue];

return cell;
}



- (IBAction)showNewEventViewController {    

NewEventViewController *controller = [[NewEventViewController alloc] initWithNibName:@"NewEventView" bundle:nil];
controller.routines = routines;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:controller animated:YES];

[controller release];
}




- (void)viewDidLoad {

routines = [[NSMutableArray alloc] init];

[routines addObject:@"Hello"];
[routines addObject:@"Temp"];
[routines addObject:@"Temp2"];
[routines addObject:@"Temp3"];
[routines addObject:@"Temp4"];


}

и контроллеры модального представления .h (NewEventViewController.h)

#import <UIKit/UIKit.h>


 @interface NewEventViewController : UIViewController {

IBOutlet UITextField *RoutineTitle;

IBOutlet UITextField *RoutineInvolvment;


NSMutableArray *routines;


}


@property(nonatomic, retain)  NSMutableArray *routines;


-(IBAction)done;


@end

и его .h

#import "NewEventViewController.h"
#import "FirstViewController.h"




@implementation NewEventViewController
@synthesize routines;


-(IBAction)done{



 [routines addObject:RoutineTitle.text]; 
[self dismissModalViewControllerAnimated:YES];
NSLog(@"Routines: %@", routines);

}

Ответы [ 2 ]

0 голосов
/ 20 января 2010

Ваш готовый селектор должен вызвать reloadData. Если все подключено правильно (делегат табличного представления, источник данных), оно должно работать правильно. Тем не менее, вы можете установить вид скрытым и появляться снова, пока он не будет работать, но он слишком хакерский (и не правильный подход)

Готово является частью NewEventViewController, поэтому вы можете:

1 Передайте данные с помощью NSNotificationCenter defaultCenter

2.Сделайте экземпляр FirstViewController глобальным, доступным из селектора done.

0 голосов
/ 20 января 2010

Вы продолжаете задавать один и тот же вопрос, так что, очевидно, где-то есть разъединение.Опубликуйте свой код, который вы используете для представления контроллера модального представления.Рабочий процесс должен выглядеть примерно так:

  • Создайте контроллер представления, который вы собираетесь выдвигать модально.Убедитесь, что у него есть ивар и методы доступа для установки контейнера данных табличного представления (например, setDataContainer: (NSMutableArray *) dataContainer)

  • Вызов setDataContainer: процедуры на контроллере представления.

  • Представить контроллер модального представления

  • В готовой кнопке добавьте запись в заданный вами контейнер данных ([dataContainer addObject: newObject] и удалитеконтроллер модального представления

  • Вызовите reloadData в вашем viewWillAppear, как вы делаете в коде по ссылке выше.

Мы не можемпомочь вам, если вы не разместите код, который показывает, что вы делаете.

С наилучшими пожеланиями,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...