UIToolbar 和 UIImageView 未显示在模拟器中
Posted
技术标签:
【中文标题】UIToolbar 和 UIImageView 未显示在模拟器中【英文标题】:UIToolbar and UIImageView not showing up in Simulator 【发布时间】: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];
【问题讨论】:
【参考方案1】:你需要在你的实现方法中调用[super viewWillAppear:animated]
,如the documentation中所说。
【讨论】:
是的,我错过了那个..但我现在已经完成并运行模拟器。没有变化.. UIToolbar 和 UIImageView 仍然没有出现。我应该看到 ItemViewController 的视图的第一个视图有一个 navBar。它是一个 tableView,当我选择 tableViewCells 中的任何一个时,我将被带到 DetailViewController 的视图,其中所有子视图(如文本字段、标签和带有 barButtonItem 的导航栏)都位于该视图中。现在,我还添加了一个带有相机按钮的工具栏,并在中心添加了单独的 imageView。 XIB 中的这两个新增功能没有出现。 请记住,ItemsViewController 是 NavigationBar 的 rootViewController。当 ItemsViewController 的 tableView 中的一行被选中时,DetailsViewController 被推送到 NavController 的堆栈中。【参考方案2】:使用 4 英寸模拟器,这是作者在第一章中要求的。 当你移动到与约束相关的章节时,你将能够解决 3.5 英寸模拟器
【讨论】:
以上是关于UIToolbar 和 UIImageView 未显示在模拟器中的主要内容,如果未能解决你的问题,请参考以下文章
未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到