【发布时间】:2013-12-06 19:45:58
【问题描述】:
在 Big Nerd Ranch,iOS 编程指南(第 3 版)第 12 章是“相机”。
在其中,他们在 XIB 文件中添加了一个 UIToolbar 对象,然后添加了一个摄像头 barbuttonitem。我们必须在中心添加一个UIImageView 以及查看模式Aspect Fit。
我按原样按照这些说明进行操作,然后进行必要的连接,并从相机按钮向文件所有者添加了一个目标操作方法 (DetailViewController)。
一切似乎都很好,直到我在模拟器中运行代码,其中没有显示添加的UIImageView 和UIToolbar。在这些之前添加的所有其他对象,看起来都很好(标签和文本字段)。
代码包含一个navigationController,其中有一个rootViewController (ItemsViewController)。因此,当我在 ItemsViewController 的 tableview 中选择一个项目时(因为ItemsViewController 是一个TableViewController),一个新的viewController 被推到UINavigationController's 堆栈上,这将是DetailViewController。
现在DetailViewController.xib 是所有对象的位置,包括工具栏和图像视图(出现问题的两个东西)。
我没有包含 ItemsViewController 的 实现。只是 DetailViewController 的。
代码如下:
DetailViewController.h
#import <UIKit/UIKit.h>
@class BNRItem;
@interface DetailViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
{
__weak IBOutlet UITextField *nameField;
__weak IBOutlet UITextField *serialNumberField;
__weak IBOutlet UITextField *valueField;
__weak IBOutlet UILabel *dateLabel;
__weak IBOutlet UIImageView *imageView;
}
@property BNRItem *item;
- (IBAction)takePicture:(id)sender;
@end
DetailViewController.m
#import "DetailViewController.h"
#import "BNRItem.h"
@interface DetailViewController ()
@end
@implementation DetailViewController
-(void)viewDidLoad{
NSLog(@"DetailsView loaded");
[super viewDidLoad];
[[self view] setBackgroundColor:[UIColor groupTableViewBackgroundColor]];
}
-(void)viewWillAppear:(BOOL)animated{
NSLog(@"DetailsView appearing");
[nameField setText:[_item itemName]];
[serialNumberField setText:[_item serialNumber]];
[valueField setText:[NSString stringWithFormat:@"%d",[_item valueInDollars]]];
NSDateFormatter *dateFormatter= [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateLabel setText:[dateFormatter stringFromDate:_item->dateCreated]];
}
-(void)viewWillDisappear:(BOOL)animated{
NSLog(@"DetailsView disappearing");
[super viewWillDisappear:animated];
//Clear First Responder
[self.view endEditing:YES];
//Save changes to the item.
[_item setItemName:[nameField text]];
[_item setSerialNumber:[serialNumberField text]];
[_item setValueInDollars:[[valueField text] intValue]];
}
-(void)setItem:(BNRItem *)item{
_item= item;
[self.navigationItem setTitle:[_item itemName]];
}
- (IBAction)takePicture:(id)sender {
UIImagePickerController *imagePicker= [[UIImagePickerController alloc] init];
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
NSLog(@"Yes. The Camera is available ");
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
}
else{
NSLog(@"The Camera isn't available.Try thru the Photo Library");
[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
[imagePicker setDelegate:self];
[self presentViewController:imagePicker animated:YES completion:nil];
}
【问题讨论】:
标签: ios objective-c cocoa-touch uiimageview uitoolbar