首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIViewController在其他UIviewController和IBActions中

UIViewController在其他UIviewController和IBActions中
EN

Stack Overflow用户
提问于 2011-03-14 16:22:57
回答 3查看 1.8K关注 0票数 0

我正在设计一个iPad应用程序,小UIScrollViews有自己的UIViewController。这些控制器的视图中有一个按钮,用于调用IBAction方法。但它不起作用,事实上,它似乎没有被压在模拟器上。

这是一些代码,让你知道我在做什么。

代码语言:javascript
复制
// In UIViewController A (say the parent or root that have several UIScrollViews)

    MiniViewController * mini = [[MiniViewController alloc]init];
    [scrollView1 addSubview:mini.view];

//repeat the same process a couple of times with different uiscrollsviews and instances of miniviewcontrollers

现在MiniController非常简单,您可以猜到,我只发布.h文件

代码语言:javascript
复制
@interface MiniControlador : UIViewController {
     IBOutlet UIButton * button;
}
@property (nonatomic, retain) IBOutlet UIButton * button;
- (IBAction)doSomething:(id)sender;
@end

您可以看到,我使用接口生成器将UIButton“按钮”连接到一个名为doSomething的方法。但正如我已经说过的,它不起作用。

还有一件事。我还试图添加一个按钮到UIScrollView与迷你控制器实例programmatically.And工作!但我确信这是非常硬编码的。

你认为如何?任何建议我都会感激的。

EN

回答 3

Stack Overflow用户

发布于 2011-03-14 21:52:51

苹果的视图控制器编程指南是一本重要的读物,它解释了苹果的每屏一视图控制器的理念。

视图控制器的许多行为都建立在这样的假设之上:一次只有一个视图控制器在运行。当这个假设被违反时,行为是没有定义的(或者至少是没有记录的)。在这种情况下,您的描述表明,将控制器插入根视图和根的superview (通常是前一个屏幕)之间的响应链的正常视图控制器行为是无效的。

虽然您可能会发现正确工作的初始化方法,但它们不能保证工作正常,而且这种行为可能会随着将来的OS更新而改变。

编辑:来自View编程指南的相关引用:

您创建的每个自定义视图控制器对象负责管理单个视图层次结构中的所有视图。在iPhone应用程序中,视图层次结构中的视图通常覆盖整个屏幕,但在iPad应用程序中,它们可能只覆盖屏幕的一部分。视图控制器与视图层次中视图之间的一对一对应是设计的关键考虑因素。不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分。类似地,您不应该使用单个自定义视图控制器对象来管理多个内容屏幕。

票数 2
EN

Stack Overflow用户

发布于 2011-06-17 21:27:29

谢谢各位,我最终使用了一个类的对象(我称之为GenericViewController)来解决这个问题。它实际上就像一个普通的UIViewController,IBActions对任何事件都有很好的响应(即按下按钮)。

我使用IBOutlet UIView来包含UILabels、buttons...and等等。

如果有人感兴趣,这里有一些代码。

代码语言:javascript
复制
@interface GenericViewController : NSObject {
  /* Some IBOutlets here*/

     //like a regular UIView of an UIViewController, this holds the rest of the outlets
  IBOutlet UIView * view;
  } 
   //some IBActions here
  }

然后UIScrollView只添加每个GenericViewController对象的视图

代码语言:javascript
复制
[scrollView addSubview:genericViewControllerObject.view];

如果有人有更好的解决方案,请告诉我:)

票数 1
EN

Stack Overflow用户

发布于 2011-03-14 21:52:44

您确定是从您在InterfaceBuilder中生成的xib加载视图吗?

我在我的应用程序中做了一些类似的事情,而且它对我很有用。

我正在实现这样的init方法:

代码语言:javascript
复制
- (id)init
{
    if (self = [super initWithNibName:@"__your_xib_name__" bundle:[NSBundle mainBundle]])
    {
        // TODO: Add additional initializing here
        // ...
    }

    return self;
}

如果您没有从xib加载视图,那么就不会建立连接(没有初始化IBOutlets,也没有触发IBActions )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5301399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档