从表格视图单元格添加视图

时间:2011-06-30 04:39:46

标签: ios uitableview click row

我知道之前已经问过这个问题,但是我的问题与众不同。我的应用程序有一个添加按钮和编辑按钮,可以删除/添加表视图。我希望用户创建的每个单元格都转到同一个视图。我一直在寻找代码,但我找不到它。顺便说一句,____只是一个占位符。表编码在app委托中,我有一个第二个视图控制器,用于在单击一行时加载的视图。

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 :(得分:0)

我并不是说要严厉,但你需要学习很多基础知识。通过消除手动管理内存的需要(大多数情况下),ARC将使您的生活更轻松,代码更好。您可以在首次启动项目时启用它。你应该。

为什么App Delegate管理表格视图?不不不。应用程序委托应该响应系统级事件,而不是运行整个应用程序。您需要一个单独的视图控制器。在Web上查找一些教程,看看如何构建使用表视图的基本应用程序。有许多。我最喜欢的是raywenderlich.com