2015年

6月

19日

Objective-C Table 行追加・削除・画面遷移

Table 「+」で行の追加、「Edit」で削除ができ「>」をクリックすると画面遷移します。

iOS Application Maser-Detail Application を選択するだけでこの仕様内容が使用できます。 

MasterViewController.m

#import "MasterViewController.h"


#import "DetailViewController.h"


@interface MasterViewController () {

    NSMutableArray *_objects;

}

@end


@implementation MasterViewController


- (void)awakeFromNib

{

    [super awakeFromNib];

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    self.navigationItem.leftBarButtonItem = self.editButtonItem;


    // システムで用意されたボタン

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];

    self.navigationItem.rightBarButtonItem = addButton;

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


// 行の挿入

- (void)insertNewObject:(id)sender

{

    if (!_objects) {

        _objects = [[NSMutableArray alloc] init];

    }

    [_objects insertObject:[NSDate date] atIndex:0];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

    [self.tableView insertRowsAtIndexPaths:@[indexPath]

                          withRowAnimation:UITableViewRowAnimationAutomatic];

}


#pragma mark - Table View


// 設定(列数)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    return 1;

}


// 設定(行数)

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

{

    return _objects.count;

}


// 設定(セル)

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

{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"

                                                            forIndexPath:indexPath];


    NSDate *object = _objects[indexPath.row];

    cell.textLabel.text = [object description];

    return cell;

}


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

{

    // Return NO if you do not want the specified item to be editable.

    return YES;

}


// セルを削除

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

{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Delete時の処理をここに書く

        [_objects removeObjectAtIndex:indexPath.row];

        [tableView deleteRowsAtIndexPaths:@[indexPath]

                         withRowAnimation:UITableViewRowAnimationFade];

    } else if (editingStyle == UITableViewCellEditingStyleInsert) {

        // Insert時の処理をここに書く

    }

}


/*

// Override to support rearranging the table view.

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

{

}

*/


/*

// Override to support conditional rearranging of the table view.

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

{

    // Return NO if you do not want the item to be re-orderable.

    return YES;

}

*/


// 画面遷移時の情報のやり取り

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    // Segueの特定

    if ([[segue identifier] isEqualToString:@"showDetail"]) {

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        NSDate *object = _objects[indexPath.row];

        [[segue destinationViewController] setDetailItem:object];

    }

}


@end

DetailViewController.h

#import <UIKit/UIKit.h>


@interface DetailViewController : UIViewController


@property (strong, nonatomic) id detailItem;


@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;

@end

DetailViewController.m

#import "DetailViewController.h"


@interface DetailViewController ()

- (void)configureView;

@end


@implementation DetailViewController


#pragma mark - Managing the detail item


- (void)setDetailItem:(id)newDetailItem

{

    if (_detailItem != newDetailItem) {

        _detailItem = newDetailItem;

        

        // Update the view.

        [self configureView];

    }

}


- (void)configureView

{

    // Update the user interface for the detail item.


    if (self.detailItem) {

        self.detailDescriptionLabel.text = [self.detailItem description];

    }

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    [self configureView];

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end

GitHub Table_tpl

  

目 次