我正在尝试在我正在使用的应用程序中使用故事板.在应用程序中有Lists和Users,每个都包含其他列表(列表成员,用户拥有的列表).所以,相应地,我有ListCell和UserCell课.目标是让它们在整个应用程序中可重复使用(即,在我的任何tableview控制器中).
这就是我遇到问题的地方.
如何在故事板中创建可在任何视图控制器中重复使用的自定义tableview单元格?
以下是我迄今为止尝试过的具体内容.
在Controller#1中,添加了一个原型单元格,将类设置为我的UITableViewCell子类,设置重用ID,添加标签并将它们连接到类的出口.在Controller#2中,添加了一个空的原型单元格,将其设置为同一个类并重复使用id.当它运行时,当控制器#2中显示单元格时,标签永远不会出现.在Controller#1中正常工作.
在不同的NIB中设计每种细胞类型,并连接到适当的细胞类.在storyboard中,添加了一个空的原型单元格并设置其类并重用id来引用我的单元类.在控制器的viewDidLoad方法中,为重用ID注册了那些NIB文件.如图所示,两个控制器中的单元格都像原型一样空.
将两个控制器中的原型保持为空并设置类并将id重用于我的单元类.完全用代码构建单元格的UI.细胞在所有控制器中都能完美运
在第二种情况下,我怀疑原型总是覆盖NIB,如果我杀死原型单元,注册我的NIB用于重用ID将起作用.但后来我无法设置从单元格到其他框架的segue,这实际上是使用故事板的全部要点.
在一天结束时,我想要两件事:在故事板中连接基于tableview的流,并在视觉上而不是在代码中定义单元格布局.到目前为止,我无法看到如何获得这两者.
我们的一个应用程序屏幕要求我们放置UICollectionView一个UITableViewCell.这UICollectionView将具有动态数量的项目,从而产生必须动态计算的高度.但是,我在尝试计算嵌入式高度时遇到了问题UICollectionView.
我们的总体设计UIViewController是在故事板中创建的,并且确实利用了自动布局.但是,我不知道如何动态增加UITableViewCell基于高度的高度UICollectionView.
任何人都可以提供一些如何实现这一目标的建议或建议吗?
我有一个非滚动UITableView的UIScrollView.我将帧的大小设置UITableView为其内容大小.
当我添加一行时UITableView,我调用insertRowsAtIndexPaths:withRowAnimation:on UITableView.然后我调用一个方法来调整框架UITableView:
- (void)resizeTableViewFrameHeight
{
// Table view does not scroll, so its frame height should be equal to its contentSize height
CGRect frame = self.tableView.frame;
frame.size = self.tableView.contentSize;
self.tableView.frame = frame;
}
Run Code Online (Sandbox Code Playgroud)
看来虽然此时contentSize尚未更新.如果我根据行数和节数手动计算上述方法中的帧,则该方法可以正常工作.
我的问题是,我怎样才能UITableView更新它contentSize?我想我可以调用reloadData,这可能会这样做,但是当我只插入一个单元格时重新加载整个表似乎效率低下.
我有一个UINavigationController(像一个向导页面一样)我以编程方式创建,我需要显示一个"取消"按钮来取消任何进程UIViewController.
创建UINavigationController:
FirstVC *firstVC = [[[FirstVC alloc] initWithNibName:@"FirstPage" bundle:nil] autorelease];
firstVC.delegate = self;
navigationController = [[UINavigationController alloc] initWithRootViewController:firstVC];
[self.view addSubview:navigationController.view];
Run Code Online (Sandbox Code Playgroud)
添加取消按钮:
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelRequestNewLeave:)];
navigationController.topViewController.navigationItem.rightBarButtonItem = cancelButton;
[cancelButton release];
Run Code Online (Sandbox Code Playgroud)
但当我按下第二页时UINavigationController,取消按钮上没有显示UINavigationBar.如果我回到第一页,取消按钮就在那里.所以,显然该按钮仅为第一个视图添加.我相信这是因为我不是子类UINavigationController,因为我需要在子视图中使用它.但我不知道如何设置rightBarButtonItem在UINavigationController其中编程方式创建.
navigationController.topViewController.navigationItem.rightBarButtonItem = cancelButton;
Run Code Online (Sandbox Code Playgroud)
有人可以对此有所了解吗?
提前致谢.
刚才我开始在rails中使用Concerns,但我怀疑为什么我们会关注,因为我们可以在模块和混合概念上实现相同的功能.所以请任何人告诉我关于使用关注而不是使用模块.
我正在使用Facebook SDK 4.0,https://developers.facebook.com/docs/sharing/ios#share_dialog
我FBSDKShareDialog用来分享Photo.It分享Photo如果用户安装了Facebook应用程序,但是当用户没有安装时它会失败安装了FB App.但他们说"如果某人没有安装Facebook应用程序,它将自动回退到基于网络的对话框." Idk什么错了请帮我分享使用FBSDK 4.0的照片.
我的代码是
FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
photo.image = self.capturedImageView.image;
photo.userGenerated = YES;
FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
content.photos = @[photo];
[FBSDKShareDialog showFromViewController:self
withContent:content
delegate:self];
Run Code Online (Sandbox Code Playgroud)
这是错误报告

错误:"com.facebook.sdk:FBSDKErrorArgumentNameKey = shareContent,com.facebook.sdk:FBSDKErrorDeveloperMessageKey = Feed共享对话框支持FBSDKShareLinkContent."
我有一个UITableViewa的子视图UIView,然后UIView是a的子视图UIScrollView.如何检测应滚动的触摸UITableView?
将UITableView能获得项目选择事件(表中的单元格选中/抽头)就好了,但你必须按住电池它将触发之前.但我不能得到UITableView滚动,它始终是UIScrollView对平移手势的反应.
任何帮助是极大的赞赏.提前致谢!
编辑:解决了,虽然我问了错误的问题.正如Roman K所指出的,它默认工作.我认为这个问题与UITableView外部的一部分UIScrollView(UITableView超过了界限UIScrollView)有关.将其设置为正确安装在UIScrollView固定的内部.
我正在使用a UIWebView并且不希望导航栏出现,除非用户点击屏幕上不是链接的任何地方.所以我有这段代码在延迟后显示导航栏:
- (void)handleTapGesture:(UITapGestureRecognizer *)sender
{
....
[self performSelector:@selector(showNavigationBar) withObject:self afterDelay:0.2];
}
Run Code Online (Sandbox Code Playgroud)
调用showNavigationBartap处理程序时我没有立即调用,因为用户可能已经点击了链接,在这种情况下,之前 调用了轻击手UIWebView shouldStartLoadWithRequest,所以如果我隐藏导航栏,shouldStartLoadWithRequest它会瞬间闪现在屏幕上.所以我把它设置为在延迟之后显示,这给了下面代码在其中执行的时间shouldStartLoadWithRequest(如果用户没有点击链接shouldStartLoadWithRequest没有被调用并且显示导航栏,那么在那种情况下应该如此) ).
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavigationBar) object:nil];
...
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,我已经将延迟时间增加到几秒钟并且可以确认cancelPreviousPerformRequestWithTarget在显示导航栏之前调用,但是当指定的时间过去时,显示条形图.cancelPreviousPerformRequestWithTarget没有效果.
有谁知道它为什么不起作用?
我目前正在设计一个CloudKit基于同步的解决方案,我想知道最好的方法是保持列表(在我的情况下是一个数组)的云项(CKRecord对象)的顺序是一致的.
Apple建议不要保留对子对象的引用,而只是使用CKReference来自子对象的父对象引用父对象.如果您想根据其中一个属性(例如创建日期)查询项目,则可以正常工作,但如果您有一个由用户确定的订单则不行.
我提出了两种基于相同想法的不同方法:维护标识符清单以管理项目的位置.
1)同步具有标识符数组的额外记录(aka清单),每个标识符标识一个CKRecord对象(以及相应的本地模型对象).
2)创建一个父对象,该对象包含CKReference对其子对象的引用(对象)数组.此数组维护给定的顺序.
我觉得这不是解决这个问题的最好办法,我很高兴听到你的想法.
Does somebody know a rich text editor (like NSTextView for Mac OS X) library for the iOS platform?
ios ×8
uitableview ×4
objective-c ×3
cocoa-touch ×2
ipad ×2
iphone ×2
uiscrollview ×2
cloudkit ×1
cocoa ×1
facebook ×1
macos ×1
storyboard ×1