小编Jay*_*ani的帖子

如何从UITableViewCell获取UITableView?

我有一个UITableViewCell链接到一个对象,我需要告诉我单元格是否可见.从我已经完成的研究中,这意味着我需要以某种方式访问UITableView包含它的内容(从那里,有几种方法可以检查它是否可见).所以我想知道是否UITableViewCell有一个指针UITableView,或者是否还有其他方法从单元格获取指针?

iphone xcode objective-c tableview ios

97
推荐指数
8
解决办法
6万
查看次数

当UIView帧更改时,视图内的AVPlayer图层不会调整大小

我有一个UIView包含AVPlayer显示视频的内容.更改方向时,我需要更改视频的大小和位置.

我对调整图层大小没有经验,所以我在调整视频大小时遇到​​了问题.

我首先创建AVPlayer并将其播放器添加到我的videoHolderView的图层:

NSURL *videoURL = [NSURL fileURLWithPath:videoPath];
self.avPlayer = [AVPlayer playerWithURL:videoURL];

AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
playerLayer.frame = videoHolderView.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
playerLayer.needsDisplayOnBoundsChange = YES;

[videoHolderView.layer addSublayer:playerLayer];
videoHolderView.layer.needsDisplayOnBoundsChange = YES;
Run Code Online (Sandbox Code Playgroud)

然后,稍后,我将更改videoHolderView框架的大小和位置:

[videoHolderView setFrame:CGRectMake(0, 0, 768, 502)];
Run Code Online (Sandbox Code Playgroud)

此时,我需要avPlayer调整大小到这些相同的维度.这不会自动发生 - avPlayer在videoHolderView中保持小尺寸.

如果有人可以提供帮助,我真的很感激任何建议.

多谢你们.

objective-c calayer uiview avplayer

52
推荐指数
7
解决办法
6万
查看次数

如何以编程方式创建UIScrollView?

好吧,所以这里的关键是我根本不使用IB,因为我正在使用的View是以编程方式创建的.该UIView覆盖下半部分的屏幕,并有一堆上的按钮.但是,我想添加更多按钮UIView,而不是更大.为此,我想UIScrollView在视图内部进行操作,这将允许我在屏幕上添加更多按钮,以便用户可以滚动到它们.我认为这是它的工作原理.

self.manaView = [[[UIView alloc] initWithFrame:frame] autorelease];
self.manaView.backgroundColor = [UIColor purpleColor];

UIScrollView *scroll = [UIScrollView alloc];
scroll.contentSize = CGSizeMake(320, 400);
scroll.showsHorizontalScrollIndicator = YES;
[self.manaView addSubview:scroll];
Run Code Online (Sandbox Code Playgroud)

代码的第一部分引用了我的UIView,它工作得很好,但我无法弄清楚如何以UIScrollView编程方式进行并将其添加到视图中,然后向其添加按钮.

UIButton *ret2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
ret2.tag = 102;
ret2.frame = CGRectMake(255, 5, 60, 50);
[ret2 setTitle:@"Return" forState:UIControlStateNormal];
[ret2 addTarget:self action:@selector(flipAction:) forControlEvents:UIControlEventTouchUpInside];
[scroll addSubview:ret2];
Run Code Online (Sandbox Code Playgroud)

当我这样做时,按钮就会从屏幕上消失.那么我该怎么做呢?谢谢您的帮助!

iphone objective-c uiscrollview

38
推荐指数
3
解决办法
8万
查看次数

从iOS中的App Delegate调用当前视图控制器中的方法

我有两个视图控制器(BuildingsViewController和RoomsViewController),它们都使用名为upload的App Delegate中的一个函数.upload函数基本上执行HTTP请求,如果成功或不成功,则触发uialertview.这工作正常.

我正在努力的部分来自app delegate的connectionDidFinishLoading方法.我需要能够通过viewWillAppear该视图控制器的方法基本上刷新当前视图控制器.在viewWillAppear每个视图控制器的功能内部,我有代码,用于确定底部工具栏上的按钮.

我希望通过app delegate完成上传时,每个视图控制器工具栏中的"上传"按钮会自动删除.

我试过在app委托[viewController viewWillAppear:YES]connectionDidFinishLoading方法中做,但它永远不会被调用.

我希望我足够清楚.任何帮助是极大的赞赏.

谢谢.

iphone objective-c ios

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

当contentSize更改时,UIScrollView会调整contentOffset

我正在调整一个详细视图控制器的状态,就在它按下之前navigationController:

[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
                                     animated:YES];
Run Code Online (Sandbox Code Playgroud)

DetailViewController一个scrollView驻留.我根据传递的对象调整了哪些内容:

- (void)detailsForObject:(id)someObject {
    // set some textView's content here
    self.contentView.frame = <rect with new calculated size>;

    self.scrollView.contentSize = self.contentView.frame.size;
    self.scrollView.contentOffset = CGPointZero;
}
Run Code Online (Sandbox Code Playgroud)

现在,这一切都有效,但scrollView会contentOffset在navigationController的滑入式动画中调整它.在contentOffset将被设置为最后contentSize和新计算之间的差异.这意味着第二次打开detailsView时,详细信息将滚动到某个不需要的位置.即使我设置contentOffsetCGPointZero明确.

我发现,重新contentOffset- viewWillAppear没有任何效果.我能想到的最好的方法是重置contentOffset viewDidAppear,导致内容明显上下移动:

- (void)viewDidAppear:(BOOL)animated {
    self.scrollView.contentOffset = CGPointZero;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法防止UIScrollViewcontentOffsetcontentSize改变时调整它?

iphone uiscrollview ios contentsize

37
推荐指数
2
解决办法
4万
查看次数

以编程方式创建UITableViewCell或从笔尖加载一个是否更快?

时间分析器显示我的应用程序中最耗时的操作是UITableViewCells从nib文件加载.其中最昂贵的是加载UITableViewCell4KB图像.

UITableViewCell使用以下代码从nib 加载:

    [[NSBundle mainBundle] loadNibNamed:@"UITableViewCellPortrait" owner:self options:NULL];
    cell = portraitCell;
    self.portraitCell = nil;
Run Code Online (Sandbox Code Playgroud)

有没有人比较过以编程方式创建视图或UITableViewCell从笔尖加载a之间的区别?

编辑:
我比较了UITableViewCell从笔尖重复加载和以编程方式创建视图的时间曲线.我的测试包括UITableViews在3-5秒的时间内交替两次约10次.在每个测试中,以UITableViewCell编程方式加载速度要快得多,速度提高2到6倍.

任何人都可以证实这些结果吗?

编辑:我更新了nib加载代码只加载nib文件一次,并使用缓存版本进行后续调用.

    if (self.UITableViewPortaitNib == nil) {
        self.UITableViewPortaitNib = [UINib nibWithNibName:@"UITableViewCellPortrait" bundle:[NSBundle mainBundle]];
    }

    self.UITableViewPortaitNib instantiateWithOwner:self options:NULL];
    cell = portraitCell;
    self.portraitCell = nil;
Run Code Online (Sandbox Code Playgroud)

我还使用自动化仪器来创建更一致的运行,结果仍然建议以UITableViewCells编程方式加载比加载UITableViewCells笔尖更快.UITableViewCells从笔尖加载的平均运行时间约为90 UITableViewCell毫秒,而以编程方式创建的平均运行时间为50毫秒.

iphone cocoa-touch uikit ios

15
推荐指数
2
解决办法
4176
查看次数

键盘到位后移动UIScrollView

[编辑:]问题已经解决.我没有正确链接我的代表UIBuilder.代码很好!

我想在键盘出现时调整scrollview的大小.我去了开发人员文档并找到了这些信息.

http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW1

在左侧"管理键盘".

在文档中,它显示了一些代码来检测键盘的大小,然后调整大小UIScrollView.我NSLog在函数代码中放了一条消息,- (void)keyboardWasShown:(NSNotification*)aNotification所以我看到函数实际上被调用了,但是当我尝试NSLog使用kbSize.height时,它的值总是为0.

为什么苹果为此目的提供的代码不起作用?

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;

    // If active text field is hidden by keyboard, scroll it so it's visible
    // Your application might not need or want this behavior.
    CGRect aRect = self.view.frame;
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, activeField.frame.origin) …
Run Code Online (Sandbox Code Playgroud)

iphone keyboard objective-c ipad ios

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

使用customView创建一个UIBarButtonItem就像Flexible-Space项一样

我有一个UIBarButtonItemUITextField定义视图.工具栏包含此项目和几个按钮.

当工具栏调整大小(比如设备方向更改)时,我希望UITextField增长或缩小(宽度)以占用工具栏中的所有可用空间.

如果没有弄清楚工具栏中所有按钮的组合大小,然后UITextField适当地设置宽度,是否只有一些神奇的方法可以让这个项目像灵活空间条项目一样?

uitoolbar uibarbuttonitem ios

14
推荐指数
2
解决办法
7191
查看次数

是否有一个UIViewController方法,当应用程序移动到后台时会自动调用?

我的UIViewController模型组件在下载完内容后发出的通知寄存器.

下载可以在后台进行(通过使用beginBackgroundTaskWithExpirationHandler:),所以显然我不希望我的GUI尝试重绘等,如果下载在后台完成.

所以我想我有两个选择 - 1)模型知道它在后台/前景中的时间并且不会触发通知.2)UIViewController在后台通知的注销登记.

选项2)是更可取的.

UIViewController当应用程序进入后台时,总会调用一个方法吗?或者,UIViewController当应用程序进入后台时,是否必须注册才能收到通知事件?

(看起来像等viewWillDisappear,viewWillUnload当应用程序移动到后台时不会被调用?)

ios

14
推荐指数
1
解决办法
4340
查看次数

cancelAllOperations对[NSOperationQueue mainQueue]不起作用

cancelAllOperations()不适用于mainQueue(该cancel()方法未在该NSOperation对象上调用).我错过了什么吗?我必须遍历所有操作并调用cancel()方法才能使其工作.

nsoperationqueue ios

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