在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
已经配置并连接了所有对象,包括工具栏和imageview(出现问题的两件事)。
我没有包含 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];
}
答案 0 :(得分:0)
您需要在实施方法中致电[super viewWillAppear:animated]
,如the documentation中所述。
答案 1 :(得分:0)
使用4英寸模拟器,这是作者在第一章中要求的。 当你转到与约束相关的章节时你将能够解决3.5英寸模拟器