iOS: добавить новую ячейку в таблицу из другого представления

Мне было интересно, как лучше всего добавить новую ячейку в табличное представление в iOS. Допустим, у меня есть firstviewcontroller и secondviewcontroller. На firstviewcontroller у меня есть табличное представление, уже заполненное некоторыми данными, у меня также есть панель навигации с кнопкой добавления вверху. При нажатии на кнопку «Добавить» будет представлено новое представление, а затем я хочу передать данные из этого контроллера второго вида в контроллер первого представления и заполнить им мое табличное представление.

Спасибо, Сэм


person sam    schedule 03.11.2011    source источник


Ответы (3)


Второй ViewController должен создать протокол делегата. Затем ваш firstViewController должен быть назначен его делегатом.

Как только secondViewController сохраняет данные, он вызывает метод, который должен реализовать ваш firstViewController.

Хороший пример здесь: Как создать делегатов в Objective-C?< /а>

Для начала: secondViewController.h

@protocol secondViewControllerDelegate;

@interface secondViewController : UIViewController{
    id<secondViewControllerDelegate> __unsafe_unretained delegate;
}
@property (nonatomic, unsafe_unretained) id<secondViewControllerDelegate> delegate;
@end

@protocol secondViewControllerDelegate <NSObject>
- (void)dataSaved;
@end
person Johann    schedule 03.11.2011

Вы можете добавить новый класс с источником данных tableView. инициируйте его с необходимыми данными (от обоих контроллеров View. Используйте делегата для их взаимодействия) и после вызова изменения данных [tableView setDataSource:]:

//  DataSourceAtoZ.h
#import <Foundation/Foundation.h>
#import "MallsViewController.h"

@interface DataSourceCategory : NSObject <UITableViewDataSource> {
     NSMutableArray *data;
    UITableView *tableView;
}
@property (nonatomic, retain) NSMutableArray *data;

- (id)initWithData:(NSMutableArray *)d;

@end

затем в любом месте вашего кода составьте данные, которые вы хотите разместить в tableView, и установите источник данных:

NSMutableArray *dt = [[NSMutableArray alloc] init];
                for (int i = 0; i < [categories count]; i++) {
                    NSMutableArray *names = [[NSMutableArray alloc] init];
                    [names addObject:[[categories objectAtIndex:i] objectAtIndex:0]];
                    for (int j = 1; j < [[categories objectAtIndex:i] count]; j++) {
                        NSRange match = [[[categories objectAtIndex:i] objectAtIndex:j] rangeOfString:[params objectAtIndex:0]];
                        if (match.length != 0) {
                            [names addObject:[[categories objectAtIndex:i] objectAtIndex:j]];
                        }
                    }
                    [dt addObject:names];
                    [names release];
                }
                dsCategory = [[DataSourceCategory alloc] init];
                dsCategory = [dsCategory initWithData:dt];
                [dt release];
person SentineL    schedule 03.11.2011

Вы должны создать свои массивы в делегате приложения, а затем вызвать их и изменить их, как хотите.

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];

когда у вас есть эта строка, вы можете соединиться между двумя классами и вызвать любые методы делегата, например:

[appDelegate populateMyArray];

вы не добавляете «новые ячейки», как вы это описали, вы используете одни и те же ячейки и заполняете их разными данными.

person Dor Bashan    schedule 03.11.2011