UIToolbar和UIImageView未显示在Simulator中

时间:2013-12-06 19:45:59

标签: ios objective-c cocoa-touch uiimageview uitoolbar

在Big Nerd Ranch,iOS编程指南(第3版)中,第12章是“相机”。

在那里,他们在XIB文件中添加UIToolbar对象,然后在相机barbuttonitem中添加。我们必须在中心添加UIImageView以及查看模式Aspect Fit

我按原样遵循这些说明,然后进行必要的连接,并从相机按钮添加目标操作方法到文件的所有者(DetailViewController)。

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

代码中包含navigationController,其rootViewControllerItemsViewController)。因此,当我在ItemsViewController的tableview中选择一个项目时(因为ItemsViewControllerTableViewController),新的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];
      }

2 个答案:

答案 0 :(得分:0)

您需要在实施方法中致电[super viewWillAppear:animated],如the documentation中所述。

答案 1 :(得分:0)

使用4英寸模拟器,这是作者在第一章中要求的。 当你转到与约束相关的章节时你将能够解决3.5英寸模拟器