我有UITableViewCell
一个UITableViewController
.在我的手机有一个按钮,当你点击带你到另一个view
用prepareforsegue
.在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) 我想我缺少一些基本的东西,所以我想向社区寻求帮助.我正在构建一个基于iPhone实用程序基本应用程序的应用程序.我的MainView和FlipsideView共享一些元素,所以我为这些片段创建了单独的ViewControllers和nib文件.为了做到这一点,我做了以下工作:1.创建了一个名为searchDateViewController的viewcontroller,它是searchDateView.xib的文件所有者2. searchDateView.xib基本上是一个内部有UILabel的UIView,视图连接正确3.里面MainViewController.m和FlipsideViewController.m我将子视图添加为folllows:
- (void)loadView{
[super loadView];
searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
[[searchDateViewController view] setFrame:[searchDateView frame]];
[[self view] addSubview:[searchDateViewController view]];
...
}
Run Code Online (Sandbox Code Playgroud)
一切都显示和工作得很好.基本上取决于每个主视图和翻转视图中发生的动作,笔尖的UILabel被更改.但是,如果从MainView或FlipsideView加载searchDateViewController,我想做一些稍微不同的事情.但是,我似乎无法弄清楚哪个ViewController正在添加searchDateViewController子视图.
在searchDateViewController中,我试过:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"superview %@", self.view.superview);
NSLog(@"parentviewcontroller %@", self.parentViewController);
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都没有.
所以我的问题是 - 我能找出哪个ViewController正在添加searchDateViewController一个子视图?如果是这样的话?或者,如果我的逻辑完全搞砸了,我该怎么做呢?
谢谢!
我确定这是一个愚蠢的错误,但我正在尝试过去一小时从我的超级视图中删除子视图而没有任何成功.
在我的第一个观点上,我有
UIViewController *helpView = [[[UIViewController alloc] initWithNibName:@"HelpView" bundle:nil] autorelease];
[self.view addSubview:helpView.view];
Run Code Online (Sandbox Code Playgroud)
然后在帮助视图中我有一个连接到名为"closeHelp"的IBAction的按钮,它只执行以下操作:
- (IBAction) closeHelp{
[self.view removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)
但是这会导致我的应用程序因EXC_BAS_ACCESS崩溃而出于某种奇怪的原因,即使是在HelpView中也是如此,这意味着self.view应该指向正确的子视图.
非常感谢你的帮助
谢谢.
夏嘉曦.
我如何获得当前self
UIView
当前使用的Gran Gran父视图self.superview?.superview?.superview?.superview?.superview?.superview?
看起来有点怪异,而不是使用上述语法来获取main的任何其他方式,UIView
否则我该如何防止这种可选的链接guard
?
有什么区别
[self.view addSubview:view1];
Run Code Online (Sandbox Code Playgroud)
和
[super.view addSubview:view1];
Run Code Online (Sandbox Code Playgroud)
谢谢!!
Franhu
我注意到我可以将子视图放在superview的边界之外(部分或全部).
我想知道这是否可以接受,因为它在通常的iphone视图编程中似乎是不正常的.
谢谢.
我正在尝试实现一个可以拖出超级视图的UIView.
我尝试添加一个UIPanGestureRecognizer
我希望能够拖动的视图.然而,似乎将UIView从其超级视图中移除并将其添加到另一个视图中,正在破坏手势识别器.
使用UIGestureRecognizerStateBegan
注释掉的代码,其他两个块中的代码可以正常运行,但是当我恢复它时,永远不会实现UIGestureRecognizerStateChanged和UIGestureRecognizerStateEnded状态.
出了什么问题?
if ([gr state] == UIGestureRecognizerStateBegan)
{
CGPoint newCenter = [endView convertPoint:[self center]
fromView:startView];
[self removeFromSuperview];
[endView addSubview:self];
[self setCenter:newCenter];
}
if ([gr state] == UIGestureRecognizerStateChanged)
{
// Some code that successfully moves the view.
}
if ([gr state] == UIGestureRecognizerStateEnded)
{
// Other code.
}
Run Code Online (Sandbox Code Playgroud) 我有一个广告布局程序,它构建页面(NSView类页面),并在每个页面上放置边距和装订线(更多NSViews),然后是广告(NSView类广告).该应用自动从数据库源中放置广告,寻找适当的空间来填充每个页面.然后,用户可以选择将广告从第4页移至第2页.他们还可以选择手动投放广告或让应用自动流动,假设您刚刚移动的广告最终会以0/0 x/y位置,然后其他人将流向任何可用空间,如果当前空间没有空间(由于您刚刚移动的广告),则推送到下一页.
我正在做的是获取所有页面(它们自己是NSView的子视图,称为母版页),然后循环遍历它们以将所有子视图放入数组中.循环遍历该数组,过滤边距和装订线,如果是广告,则将其从超级视图中删除.我的想法是从干净的页面开始并替换所有广告.问题是我一直收到这个错误:
Collection <NSCFArray: 0x1078900> was mutated while being enumerated.
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码:
//loop through all the pages
for(NSView* thisPage in masterPageSubViews) {
//get all the ads on this page
NSArray* thisPageSubviews = [thisPage subviews];
for(NSView* thisPageSubview in thisPageSubviews) {
if ([[thisPageSubview className] isEqual:@"Ad"]) {
[thisPageSubview removeFromSuperview];
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想我很困惑为什么我得到这个错误.我认为数组中的对象与循环中创建的对象是分开的.
由于每个页面上的广告数量是动态的,如何在不使用阵列的情况下将其从超级视图中删除?
是否有一种简单的方法可以将NSView层次结构(nsview超级视图的超级视图的超级视图)移回主窗口或其间的某个点?
谢谢
My window adds a subview (my root ViewController's view).
Such subview is superview of several other subviews.
I have just finished an app, and now I want to add an ad.
Here's some code:
[window addSubview:viewController.view];
viewController.view.frame=CGRectMake(0,0,320,480-48);
viewController.clipToBounds=YES;
Ad *ad=[Ad alloc] initWithFrame:CGRectMake(0,480-48,320,48)];
Run Code Online (Sandbox Code Playgroud)
上面的viewController有几个子视图,但它们不会调整大小.上面的viewController.view最初是320,480,完全填充了子视图,直到底部的最后一个像素.在我将其高度从480更改为460后,子视图不会调整大小,因此在视图的底部(广告所在的位置),某些子视图不可见.
我如何调整子视图以适应父视图(viewController.view),当后者的高度减少20px时?(我知道他们会变形一点)