從表格視圖單元格添加視圖 (Add view from table view cell)


問題描述

從表格視圖單元格添加視圖 (Add view from table view cell)

I know this question has been asked before but mine is different. My app has an add button and edit button that deletes/adds table views. I want every cell that is created by the user to go to the same view. I've been looking everywhere for the code but I can't find it. BTW the ____ is just a placeholder. The table coding is in the app delegate and I have a second view controller for the view that is loaded when a row is clicked.

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:

I don't mean to be harsh, but you have a lot of basics to learn. ARC will make your life much easier and your code better, by eliminating the need to manually manage memory (for the most part). You can enable it when you first start a project. You should.

Why is an App Delegate managing a table view? No, no no. The app delegate is supposed to respond to system‑level events, not run your whole application. You need a separate view controller. Find some tutorials around the web and see how a basic app using a table view is structured. There are many. My favorites are on raywenderlich.com

(by Kunwar SethiReid)

參考文件

  1. Add view from table view cell (CC BY‑SA 3.0/4.0)

#row #iOS #click #uitableview






相關問題

PHP Grid 類型 Array 獲取行或列 (PHP Grid type Array get row or column)

在 Twitter 引導程序中為行添加背景顏色和填充 (Adding background color and padding to row in Twitter bootstrap)

從 GROUP BY 組中選擇具有特定內容的行 (Select a row with specific content from a GROUP BY group)

How to delete a row in Sqlite database in Android application by user at listview (How to delete a row in Sqlite database in Android application by user at listview)

mysql fetch 中的 $row 是什麼類型的變量? (What kind of variable is $row from a mysql fetch?)

Rowspan 不使用頂行 (Rowspan not using top row)

包含相同圖像的一半相等部分的行與 HTML 重疊 (Row with half equal section containing same image overlapped HTML)

使用 Oracle 10 監視哪些語句更新(以及何時)某個表行 (Monitoring which statement updates (and when) a certain table row with Oracle 10)

在表格行上調用 Dibs (Calling Dibs on a table row)

從表格視圖單元格添加視圖 (Add view from table view cell)

如何將引導程序 4 中的內容連續居中? (How to center in bootstrap 4 the content in a row?)

是否有更快的方法來檢查數據條目的符號是否與給定熊貓列的前一行中數據條目的符號不同? (Is there a faster way to check if the sign of the data entry is different than the sign of the data entry in previous row for a given pandas column?)







留言討論