Добавить представление из ячейки табличного представления - PullRequest
0 голосов
/ 30 июня 2011

Я знаю, что этот вопрос уже задавался, но мой другой. Мое приложение имеет кнопку добавления и кнопку редактирования, которая удаляет / добавляет представления таблицы. Я хочу, чтобы каждая ячейка, созданная пользователем, переходила в одно и то же представление. Я везде искал код, но не могу его найти. Кстати, ____ это просто заполнитель. Кодирование таблицы находится в делегате приложения, и у меня есть второй контроллер представления для представления, которое загружается при щелчке строки.

AppDelegate.h

@interface _____AppDelegate : NSObject <UIApplicationDelegate> {
    CustomCellViewController *customCellViewController;

    IBOutlet UIWindow *window;
    IBOutlet UITableViewCell *customCell;

    NSMutableArray *data;
    IBOutlet UITableView *mainTableView;
    IBOutlet UINavigationItem *navItem;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@property (nonatomic, retain) CustomCellViewController *customCellViewController;

- (IBAction)addRowToTableView;
- (IBAction)editTable;
- (NSString *)dataFilePath;

@end

AppDelegate.m

#import "______AppDelegate.h"

@implementation ______AppDelegate;

@synthesize window;
@synthesize navController=_navController;
@synthesize customCellViewController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    NSArray *archivedArray = [NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]];
    if (archivedArray == nil) {

        data = [[NSMutableArray alloc] init];                 

    } else {
        data = [[NSMutableArray alloc] initWithArray:archivedArray];
    }



    // Override point for customization after application launch
    self.window.rootViewController = self.navController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (IBAction)addRowToTableView {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"New Product" message:@"What is the name of your product?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];

    [alert addTextFieldWithValue:@"" label:@"Name of product..."];

    UITextField *tf = [alert textFieldAtIndex:0];
    tf.clearButtonMode = UITextFieldViewModeWhileEditing;
    tf.keyboardType = UIKeyboardTypeURL;
    tf.keyboardAppearance = UIKeyboardAppearanceAlert;
    tf.autocapitalizationType = UITextAutocapitalizationTypeNone;
    tf.autocorrectionType = UITextAutocorrectionTypeNo;



    [alert show];   

}


-(void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 1) {

        UITextField *tf = [alert textFieldAtIndex:0];


        [data addObject:tf.text];
        [self saveData];
        [mainTableView reloadData];     

    }
}




- (IBAction)editTable {

    UIBarButtonItem *leftItem;

    [mainTableView setEditing:!mainTableView.editing animated:YES];

    if (mainTableView.editing) {

        leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(editTable)];

    } else {

        leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editTable)];


    }

    navItem.rightBarButtonItem = leftItem;
    [self saveData];
    [mainTableView reloadData];
}


- (IBAction)endText {

}

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

    return 1;

}

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

    return [data count];

}

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

    static NSString *CellIdentifer = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:"Cell"] autorelease];

    }

    cell.textLabel.text = [data objectAtIndex:indexPath.row];

    return cell;

}

- (NSString *)dataFilePath {

    NSString *dataFilePath;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [paths objectAtIndex:0];
    dataFilePath = [[documentDirectory stringByAppendingPathComponent:@"applicationData.plist"] retain];
    return dataFilePath;

}

- (void)saveData {

    [NSKeyedArchiver archiveRootObject:[data copy]  toFile:[self dataFilePath]];

}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    [data removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];


}


- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {

    return YES;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
      toIndexPath:(NSIndexPath *)toIndexPath {
    NSString *item = [[data objectAtIndex:fromIndexPath.row] retain];
    [data removeObject:item];
    [data insertObject:item atIndex:toIndexPath.row];
    [item release];
}

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

        [tableView deselectRowAtIndexPath:indexPath animated:YES];


}



- (void)dealloc {
    [window release];
    [_navController release];
    [customCellViewController release];
    [super dealloc];
}


@end

1 Ответ

0 голосов
/ 29 апреля 2013

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

Почему App Delegate управляет табличным представлением?Нет нет нет.Предполагается, что делегат приложения отвечает на события системного уровня, а не запускает все приложение.Вам нужен отдельный контроллер вида.Найдите несколько учебных пособий в Интернете и посмотрите, как структурировано базовое приложение, использующее табличное представление.Здесь очень много.Мои любимые на raywenderlich.com

...