从表中一个酥料饼加载的图像视图的图像(load images in an image view fr

2019-10-17 15:46发布

我有在它的图像视图的视图控制器。

我有在它的表图,该锚定到栏按钮在该视图控制器酥料饼。

我想能够通过在酥料饼的使用表中加载图像到图像视图。

无论是酥料饼和主视图控制器具有单独的视图控制器类。

我都推出从赛格瑞的酥料饼。

我怎样才能做到这一点?

Answer 1:

我假设你需要赛格瑞你从imageViewController您弹出悬停tableViewController。

然后你可以设置你的imageViewController为代表的tableViewController,这样就可以调用处于分离的方式它从tableViewController方法。

MyTableViewController.h

在您的tableViewController头文件中声明,它会期待它的委托遵循的协议。 把它放在你上面的@interface部分:

    @protocol MyTableViewControllerDelegate <NSObject>
    - (void) dismissPopoverAndLoadImage:(NSString*)imageName;
    @end

同时声明属性持有对它的引用的委托:

  @property (nonatomic, weak) id <MyTableViewControllerDelegate> delegate;

该协议声明,你的tableView将期望能够在其委托调用的方法签名。 这允许它发回的一些数据,并获得自己解雇。 委托(在这种情况下,您的imageViewController)必须实现此方法。

MyTableViewController.m

当选择一个表格单元格的方法被称为上代表:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
       UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
       NSString* imageName = cell.textLabel.text;
       [self.delegate dismissPopoverAndLoadImage:imageName];
    }

MyImageViewController.h

包括MyTableViewController.h和委托协议添加到@interface

#include "TableViewController.h

@interface MyImageViewController: UIViewController <MyTableViewControllerDelegate>

声明一个属性来保存你的UIPopOverController参考,这样就可以发送一个解除消息:

@property (nonatomic, weak) UIPopoverController* seguePopoverController;

(这些步骤可能会被移动到您的.m文件的类别扩展为更好的封装)。

MyImageViewController.m

你都会将委托财产MyImageViewControllerprepareForSegue方法,该方法被调用时,SEGUE是invoked.You还将设置参考popoverController这里。

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"popoverTable"]) {
        self.seguePopoverController = [(UIStoryboardPopoverSegue*)segue popoverController];
        [segue.destinationViewController setDelegate:self];
        }
    }
} 

最后,需要实现tableViewController的委托方法:

- (void) dismissPopoverAndLoadImage:(NSString*)imageName
{
    self.imageView.image = [UIImage imageNamed:imageName];
    [self.seguePopoverController dismissPopoverAnimated:YES];
}

更新
除了以下事实popOverController本身是一个稍微不寻常的实体(无视图的控制器,直接从NSObject的继承),最优的是这样的标准委托模式。 您可以通过使用比特间接和运行时的检查有所简化它didSelectRowAtIndexPath

 if ([[self delegate] respondsToSelector:@selector(dismissPopoverAndLoadImage:)])
       [[self delegate] performSelector:@selector(dismissPopoverAndLoadImage:)
                             withObject:imageName];

在这种情况下,你不会需要定义协议或<adhere>到它,你就不需要#import MyTableViewController 。 然而,编译器会给你没有任何帮助,如果你没有正确地实现该方法。 其中,因为你可以从我前面错看,可能是不明智的。



文章来源: load images in an image view from a table in a popover
标签: cocoa-touch