当点击它的父视图控制器上的按钮时,如何以模态方式呈现UIViewController?

时间:2014-08-15 17:39:24

标签: objective-c cocoa-touch uiviewcontroller uinavigationcontroller segue

我对我已经完成的应用程序有一点问题。问题在于以模态方式呈现的搜索视图控制器。

我有一个搜索按钮,在点按时会以模拟方式显示SearchViewController

我有3种不同的控制器可以呈现。

MainViewController> CollectionViewController> DetailViewController

这实际上是控制器在层次结构中的方式。

结果始终显示在集合视图控制器上。基本上,集合视图将被刷新,剩余的单元格显示是搜索的结果。

从集合视图控制器搜索:

在集合视图控制器中,点击搜索时。搜索视图控制器以模态方式呈现。输入搜索文本并显示匹配列表。当点击一行时,搜索视图控制器将被解除,并使用委托通知集合视图控制器,集合视图将使用结果进行刷新。

从详细视图控制器中搜索 在详细视图控制器中,点击搜索时。细节视图控制器弹出堆栈,显示集合视图控制器。我使用委托通知集合视图控制器在点击搜索按钮后弹出了详细视图控制器。立即打开搜索视图控制器,使其可以搜索,就像我们最初从集合视图控制器中呈现搜索视图控制器一样。

尝试从主视图控制器搜索时出现问题。现在事情正在发挥作用,但它并没有非常专业的感觉。让我解释一下。

要从我的主视图控制器进行搜索,我使用委托。因此,在连接到搜索按钮的方法中,我执行此segue:

- (void)searchButtonTapped
{   
    [self performSegueWithIdentifier:@"garmentsCollectionSegue" sender:nil]; 
}

协议在我的界面文件中定义:

@class VAGMainTableViewViewController;
@protocol VAGMainTableViewControllerDelegate <NSObject>
- (void)mainTableViewControllerDisappearedwithTitleForObject:(NSString *)titleString;
- (void)searchButtonOnMainTableViewControllerTapped;
@end

@interface VAGMainTableViewController : UITableViewController

@property (nonatomic, weak) id<VAGMainTableViewControllerDelegate> aDelegate;

在我的准备工作之前,我有这个:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        [self setADelegate: [segue destinationViewController]];
        [[self aDelegate] searchButtonOnMainTableViewControllerTapped];
}    

这里我设置委托并调用委托方法,使集合视图控制器知道主视图控制器中的按钮点击。

最后在我的集合视图控制器中,当检测到点击时,调用以模态方式呈现搜索视图控制器的方法。显示搜索视图控制器。

在集合视图控制器

- (void)searchButtonOnMainTableViewControllerTapped
{
        [self searchButtonTapped];
}

- (void)searchButtonTapped
{
    VAGSearchViewController *svc = [[self storyboard] instantiateViewControllerWithIdentifier:@"searchPageSB"];
    svc.delegate = self;
    [self presentViewController:svc animated:NO completion:nil];
}

搜索视图控制器通过使用委托通知集合视图控制器它已被解除。这是在完成对集合视图控制器的查询和刷新并显示搜索结果的时候。

- (void)searchViewControllerDismissed:(VAGSearchViewController*)searchViewController withTitleForObject:(NSString *)titleString
{       
    _searchTitleString = titleString;
    [self setObjects:nil];
    [self performQuery];
}

好的,这样可行,但看起来并不专业,因为在从主视图控制器推送到集合视图控制器后的瞬间,在显示搜索视图控制器之前会显示集合视图。

我的目标是一个活泼的感觉。所以我更喜欢是否会立即显示搜索视图控制器。

希望我的详细帖子能让您了解我在做什么。

有一种更有效的方法可以做到这一点。问题是我无法理解。

会感激一些帮助

感谢您的耐心

1 个答案:

答案 0 :(得分:0)

点击搜索按钮时,您可以执行一项不推送集合视图控制器的操作。 如果搜索完成后推送modalviewControler然后在MainviewController中调用委托,然后在DelegateMethod中推送没有动画的集合Viewcontroller。它看起来你想要什么