DetailViewController.m
上传用户:hechengdz
上传日期:2020-05-13
资源大小:1591k
文件大小:7k
源码类别:
iPhone
开发平台:
Objective-C
- /*
- File: DetailViewController.m
- Abstract:
- Displays the details of a Book object and allows the user the edit them.
- Version: 1.9
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms. If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- Copyright (C) 2008 Apple Inc. All Rights Reserved.
- */
- #import "DetailViewController.h"
- #import "Book.h"
- #import "MasterViewController.h"
- #import "EditingViewController.h"
- #import "AppDelegate.h"
- @interface DetailViewController ()
- @property (nonatomic, retain) NSDateFormatter *dateFormatter;
- @property (nonatomic, retain) UITableView *tableView;
- @property (nonatomic, retain) NSIndexPath *selectedIndexPath;
- @end
- @implementation DetailViewController
- @synthesize book, dateFormatter, tableView, selectedIndexPath;
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
- if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
- // Title displayed by the navigation controller.
- self.title = @"Info";
- // Create a date formatter to convert the date to a string format.
- dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
- [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
- }
- return self;
- }
- - (void)dealloc {
- // Release owned resources.
- [selectedIndexPath release];
- [tableView release];
- [book release];
- [dateFormatter release];
- [super dealloc];
- }
- - (void)viewDidLoad {
- self.navigationItem.rightBarButtonItem = self.editButtonItem;
- }
- - (void)viewWillAppear:(BOOL)animated {
- // Remove any existing selection.
- [tableView deselectRowAtIndexPath:selectedIndexPath animated:NO];
- // Redisplay the data.
- [tableView reloadData];
- }
- - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
- [super setEditing:editing animated:animated];
- [self.navigationItem setHidesBackButton:editing animated:animated];
- [tableView reloadData];
- }
- #pragma mark -
- #pragma mark <UITableViewDelegate, UITableViewDataSource> Methods
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tv {
- // 3 sections, one for each property
- return 3;
- }
- - (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section {
- // Only one row for each section
- return 1;
- }
- - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
- if (cell == nil) {
- // Create a new cell. CGRectZero allows the cell to determine the appropriate size.
- cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MyIdentifier"] autorelease];
- }
- switch (indexPath.section) {
- case 0: cell.text = book.title; break;
- case 1: cell.text = [dateFormatter stringFromDate:book.copyright]; break;
- case 2: cell.text = book.author; break;
- }
- return cell;
- }
- - (NSString *)tableView:(UITableView *)tv titleForHeaderInSection:(NSInteger)section {
- // Return the displayed title for the specified section.
- switch (section) {
- case 0: return @"Title";
- case 1: return @"Copyright";
- case 2: return @"Author";
- }
- return nil;
- }
- - (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- // Only allow selection if editing.
- return (self.editing) ? indexPath : nil;
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- EditingViewController *controller = [MasterViewController editingViewController];
- controller.editedObject = book;
- switch (indexPath.section) {
- case 0: {
- controller.textValue = book.title;
- controller.editedFieldKey = @"title";
- controller.dateEditing = NO;
- } break;
- case 1: {
- controller.dateValue = book.copyright;
- controller.editedFieldKey = @"copyright";
- controller.dateEditing = YES;
- } break;
- case 2: {
- controller.textValue = book.author;
- controller.editedFieldKey = @"author";
- controller.dateEditing = NO;
- } break;
- }
- self.selectedIndexPath = indexPath;
- [self.navigationController pushViewController:controller animated:YES];
- }
- - (UITableViewCellAccessoryType)tableView:(UITableView *)tv accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {
- // Show the disclosure indicator if editing.
- return (self.editing) ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
- }
- @end