标签: superview

访问当前视图的父视图 - iOS

当我想访问UIView当前的父级时,UIViewUIView在当前声明父级UIView的父UIView对象,并通过将父对象分配给当前视图的对象属性来访问它.

有没有办法摆脱这种情况并直接调用父视图的方法或属性?

我也试过(parentView *) self.view.superview但没有帮助.

调用此对象的函数时会出错

[UIVIew unrecognized selector......
Run Code Online (Sandbox Code Playgroud)

objective-c uiview superview ios

39
推荐指数
1
解决办法
4万
查看次数

iOS:检测我的UIView在其他视图中添加的时间

CustomView *customView = [...];
[self.view addSubview:customView];
Run Code Online (Sandbox Code Playgroud)

我需要在我的CustomView类中检测它在其他视图中添加或者我的superview更改时.

uiview superview ios

33
推荐指数
2
解决办法
1万
查看次数

UIView的.如何快速找到Root SuperView?

我在视图层次结构中有一个随机的子视图.获得根超级视图的最佳/最快/最聪明的方法是什么?

干杯,
道格

subview uiview superview ios

18
推荐指数
2
解决办法
1万
查看次数

iPhone:从子视图调用父/超级方法

希望有人可以帮助我,因为我已经坚持了好几个小时.

我正在尝试制作一本图画书.我有一个视图,这是我的容器,我通过使用addsubview添加子视图.

在子视图中,我有滑动手势等,我想在父视图中触发off方法.我找出了如何触发委托,但我不能让委托触发父视图.我已经阅读了10种不同的方法,但没有工作.

我现在对超级视图的含义感到非常困惑.只是为了混淆事项,委托有一个tabcontroller,父视图是tab按钮1

我试过了

[self.view.superview method]
[self.superview method]
Run Code Online (Sandbox Code Playgroud)

在委托上我尝试了self.tabcontroller.parentviewcontroller,selectedview,super view.super

更新:子视图需要独立于父视图作为其可重用的视图.另外我没有将父视图设置为superview,因为我只是认为superview是一个带子视图的视图(请不要杀了我).那么也许我只需要将父视图设置为superview?

iphone cocoa-touch superview

11
推荐指数
1
解决办法
1万
查看次数

以编程方式创建一个视图,框架设置为superview的框架?

我有一个基于导航的应用程序,我将自定义视图放在导航视图中.

首先,我想知道如何获取"导航视图"的框架,以便我可以正确地放置我的自定义视图.
此外,我有时隐藏导航栏,并希望确保我正确获取帧信息.(不是[[UIScreen mainScreen]界限])

其次,一般来说,如何访问superview的框架以便我可以相应地放置视图?
我尝试了以下但没有成功.

-(void) loadView {
[super loadView];
UIView* myView = [[UIView alloc] initWithFrame: CGRectZero];
self.view = myView;
self.view.frame = self.view.superview.frame;
[myView release];
}
Run Code Online (Sandbox Code Playgroud)

或者在layoutSubviews中设置框架,但注意到layoutSubviews没有被调用.我猜那是因为我在这个特定视图中没有任何子视图?

谢谢

-编辑-

给定答案,我现在知道我需要将view.frame设置为superview的界限.
问题是我无法访问viewDidLoad中的superview.
我可以看到superview在viewWillAppear中正确设置,但在viewDidLoad中没有.

我发现viewDidLoad会在不同的时间被调用,例如当被pushViewController推送或访问self.view时
我有以下代码,viewDidLoad从nil == controller.view.superview调用.

if (nil == controller.view.superview) {
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [scrollView addSubview:controller.view];
}
Run Code Online (Sandbox Code Playgroud)

由于我无法从viewDidLoad访问superview,我无法像以前在viewDidLoad中那样布局视图.这看起来很不方便而且不必要地复杂.
有什么建议吗?

iphone frame superview

10
推荐指数
2
解决办法
3万
查看次数

Swift用泛型找到给定类的超级视图

我想我正在与仿制药斗争.我想创建简单的UIView扩展,以递归方式查找函数param中传递的类的超级视图.我希望函数返回可选的包含nil的对象,或者作为提供的类的实例可见的对象.

extension UIView {
    func superviewOfClass<T>(ofClass: T.Type) -> T? {
        var currentView: UIView? = self

        while currentView != nil {
            if currentView is T {
                break
            } else {
                currentView = currentView?.superview
            }
        }

        return currentView as? T
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

generics recursion parent superview swift

10
推荐指数
1
解决办法
1721
查看次数

如何使子视图填充其超级视图

无论如何我在这里找不到答案,也没有看到重复的问题.

我的代码很简单.给定3 UIView,parent,from和to,从parent中删除并添加子视图.+添加动画,但这只是doodads.

现在,问题是当我这样做时,然后得到抵消.好像它被推倒了.

我甚至添加了To.frame = ParentView.frame; 确保它有效.它没有.

我该怎么办?

+ (void) AnimateSwitchingWithParent: (UIView *) ParentView From: (UIView *) From To: (UIView* ) To
{
    /*[UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.25];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];


    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:ParentView cache:YES];*/
    [From removeFromSuperview];
    [ParentView addSubview:To];

    To.frame=ParentView.frame; //If I don't do this, the subview is still off by around 20 points
    NSLog(@"To.bounds: %@", NSStringFromCGRect(To.bounds));
    NSLog(@"From.bounds.: %@", NSStringFromCGRect(From.bounds));
    NSLog(@"ParentView.bounds: %@", NSStringFromCGRect(ParentView.bounds));


    //JA_DUMP (To.bounds);
    //JA_DUMP (To.bounds);



    /*[UIView commitAnimations];*/

}
Run Code Online (Sandbox Code Playgroud)

我已经找到了解决方案.结果是To的框架

To.frames:{{0,0},{320,372}}

但是,如果我删除To.frame = ParentView.frame,那么框架也是如此

{{0,20},{320,460}}

我想知道为什么?20点似乎是状态栏的距离.我们在哪里可以在InterfaceBuilder中设置该框架?

我在SimulatedMetric部分中将statusbar设置为none.

xcode objective-c subview superview addsubview

9
推荐指数
1
解决办法
1万
查看次数

在iOS 7中使用superview获取UITableViewCell

我得到的UITutView属于UIButton属于这样:

-(void)buttonHandler:(UIButton *)button {

    OrderCell *cell = [[button superview] superview];
    NSLog(@"cell.item = %@", cell.item.text);
Run Code Online (Sandbox Code Playgroud)

在iOS 7之前它可以正常工作.但是给了我:

[UITableViewCellScrollView item]:无法识别的选择器发送到实例0x17ae2cf0

如果我在iOS 7中运行该应用程序.但如果我这样做:

-(void)buttonHandler:(UIButton *)button {

    OrderCell *cell = [[[button superview] superview] superview];
    NSLog(@"cell.item = %@", cell.item.text);
Run Code Online (Sandbox Code Playgroud)

然后它可以在iOS 7中运行,但不是更早???!?!

我这样做是在绕过这个问题:

OrderCell *cell;
if([[[UIDevice currentDevice] systemVersion] isEqualToString:@"7.0"])
    cell = [[[button superview] superview] superview];
else
    cell = [[button superview] superview];

NSLog(@"cell.item = %@", cell.item.text);
Run Code Online (Sandbox Code Playgroud)

但是WTF还在继续!?有谁知道为什么会这样?

谢谢!

objective-c superview ios

9
推荐指数
2
解决办法
7332
查看次数

黑屏 - 在viewWillAppear中,superview是零

我有一个从选项卡式应用程序模板创建的应用程序.(ARC,iOS 4)

  • 有几个选项卡,2. tabs选项卡viewcontroller.view(ViewCont2)上有一个按钮.
  • 此按钮通过presentModalViewController方法加载另一个viewcontroller的(ModalViewCont)视图.
  • ModalViewCont上有一个关闭按钮,它调用dismissModalViewControllerAnimated.
  • 在ViewCont2的viewDidDisappear中,我将self.view = nil和其他出口设置为nil以卸载视图,以便下次在屏幕上显示时它将被新加载.我这样做是因为它继承自基类(BaseViewCont),它初始化视图控制器的一些常规属性,并在viewDidLoad方法中添加一些按钮,标签等.因此,从此基类继承的ViewControllers可以在viewDidLoad方法中以不同方式配置这些属性.

问题

现在,当ModalViewCont在屏幕上,按Home键将应用程序放在后台并在获得应用程序后,关闭ModalViewCont不会带回ViewCont2的视图,而是带有底部标签栏的黑屏.没有放置应用程序背景/前景就会发生同样的事情; 如果在点击2.制表符之前点击其他选项卡.(编辑:只有在viewWillDisappear中将self.view设置为nil而不是viewDidDisappear时才会发生这种情况.)

我确定ViewCont2加载一个新视图(检查它的引用)但是视图的superview是nil所以新视图不会显示而是显示黑屏.

事情没有用

  • 使用[self.view removeFromSuperview]; 在设置self.view = nil之前,
  • 在viewWillAppear中向父级添加视图; [self.parentViewController.view addSubview:self.view]; 这个没有顺利工作,视图略微放在屏幕上.这是因为层次结构中还有其他几个超级视图.

我考虑的解决方案

  • 1-如果viewDidLoad中的superview为nil,则它在viewWillAppear (假设)中可用.因此,ViewCont2的viewWillAppear方法可用于通过以下方式正确加载superview;

_

if (self.view.superview == nil)
{
    self.tabBarController.selectedViewController = nil;
    self.tabBarController.selectedViewController = self;
}
Run Code Online (Sandbox Code Playgroud)
  • 可以使用2- viewWillAppear基类方法进行初始化,因此无需卸载视图.因此,可以优化性能,每次视图消失时都不会卸载.此外,最好只通过检查一个标志执行一次初始化,而不是每次出现时都执行它.

问题

  • 1-为什么超级视图没有恢复?我该怎么办呢?(这是我想要理解和解决的主要问题,而不是尝试替代方案......)
  • 2-我是通过分配nil来查看卸载它而做错了吗?如果是这样,我应该如何在这种情况下正确卸载视图(选项卡式应用程序)?
  • 3- 解决方案有什么问题吗?它看起来像一个kludge?那是关于上海华和viewWillAppear中的假设是否正确?

编辑:似乎早于它应该调用viewDidLoad时(即在viewWillDisappear而不是viewDidDisappear中查看视图时),不设置superview.

view objective-c superview ios

8
推荐指数
1
解决办法
3992
查看次数

iOS7中的UITableViewCell indexPath崩溃

我有UITableViewCell一个UITableViewController.在我的手机有一个按钮,当你点击带你到另一个viewprepareforsegue.在prepareForSegue我这样做:

if ([[segue identifier] isEqualToString:@"MySegue"])
{
    UITableViewCell *cell = (UITableViewCell*) [[sender superview] superview];
    UITableView *table = (UITableView*)[[[sender superview] superview] superview];
    NSIndexPath *indexPath = [table indexPathForCell:cell]; 
}
Run Code Online (Sandbox Code Playgroud)

好!一切都运作良好.但是现在我已经用iOS7升级了xCode,当我点击单元格中的按钮时,一个错误出现给我,我不知道如何解决它:

[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x9e160b0
2013-09-20 16:30:44.427 MyApp[8212:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x9e160b0'
*** First throw call stack:
(
    0   CoreFoundation                      0x024475e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x01a5d8b6 …
Run Code Online (Sandbox Code Playgroud)

uitableview superview segue ios7

6
推荐指数
2
解决办法
6406
查看次数