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)。

一切似乎都很好,直到我在模拟器中运行代码,其中没有显示添加的UIImageViewUIToolbar。在这些之前添加的所有其他对象,看起来都很好(标签和文本字段)。

代码包含一个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 触摸未检测到

UIToolbar 未添加到键盘

UIBarButtonItems 未显示在 UIToolbar 上

出现取消按钮,但完成按钮未出现在 uitoolbar 中

UIToolbar 未位于设备底部,但在情节提要中显示正常

UIToolBar 栏按钮项目未使用 Swift 显示