在我的最新发现之后,我完全修改了这个问题.
我的目标是实现以下效果:
请注意,我知道,这可以通过插入/删除所选单元格下方的单元格来实现,我已经使用该方法成功实现了.
这次,我想尝试使用Auto Layout约束来实现这一点.
我有一个示例项目可供任何人查看,也打开了一个问题.总结一下,这是我到目前为止所尝试的内容:
我在这里作为演员有以下观点:
我已经按照以下方式在我的单元格中设置了自动布局约束(请注意,这是严格的伪语言):
我有一个自定义UITableViewCell子类,有多个出口,但最重要的是前面提到的高度约束的出口:这里的想法是constant默认将其设置为0,但是当选择单元格时,将其设置为44,所以它变得可见:
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
detailViewHeightConstraint.constant = selected ? detailViewDefaultHeight : 0
UIView.animateWithDuration(0.3) {
self.layoutIfNeeded()
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下结果:

所以效果是有效的,但不完全是我最初的想象.我没有推动主视图,而是希望细胞的高度在显示细节视图时增长,并在隐藏时收缩. …
我有一个表视图,其中包含不同类型的表视图单元格.在其中一个单元格中,有两个按钮,按下时加载视图控制器.我使用以下功能来处理按钮按下:
- (IBAction)leftButtonPressed:(id)sender
{
// Getting the pressed button
UIButton *button = (UIButton*)sender;
// Getting the indexpath
NSIndexPath *indPath = [NSIndexPath indexPathForRow:button.tag inSection:0];
// Loading the proper data from my datasource
NSArray *clickedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indPath.row];
[[SOEventManager sharedEventManager] setSelectedEvent:clickedEvent[0]];
// Everything working as it should up to this point
// Performing seque...
[self performSegueWithIdentifier:@"buttonSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
我的buttonSegue应该推送一个新的视图控制器.不管怎样,而不是推动一次,它似乎是推了两次,所以我得到以下警告:
2013-11-27 01:48:30.894 Self-Ordering App[2081:70b] nested push animation can result in corrupted navigation bar
2013-11-27 01:48:31.570 Self-Ordering App[2081:70b] Finishing up a navigation …Run Code Online (Sandbox Code Playgroud) 从watchOS 2开始,我们有一个ExtensionDelegate对象,类似于UIApplicationDelegate(对应用程序生命周期事件做出反应).
我想获得对第一个Interface Controller对象的引用,该对象将在启动时显示,以在其上设置属性(例如,传入数据存储对象).
根据文档,手上的rootInterfaceController财产WKExtension支持初始控制器:
根接口控制器位于应用程序的主故事板中,并具有与之关联的主入口点对象.WatchKit在启动时显示根接口控制器,尽管应用程序可以在启动序列完成之前呈现不同的接口控制器.
所以我尝试以下内容ExtensionDelegate:
func applicationDidFinishLaunching() {
guard let initialController = WKExtension.sharedExtension().rootInterfaceController else {
return
}
initialController.dataStore = DataStore()
}
Run Code Online (Sandbox Code Playgroud)
即使显示正确的接口控制器,此时rootInterfaceController也是零.有趣的是,如果我在willActivate()我的Interface Controller中查询相同的属性,则属性设置正确.
在iOS应用程序中,您已经可以获得根视图控制器了applicationDidFinishLaunching(),我认为它应该对watchOS起作用.
有没有办法在界面控制器显示之前(从外部)设置属性?这是一个错误吗?
非常感谢你的回答!
是否可以多次在viewpager中使用一个片段?我正在尝试使用ViewPager构建动态更新的UI.我想使用相同的设计,基本上相同的片段,每个页面都有不同的数据,比如listview适配器.
我想从我的应用程序发出以下请求:
AFHTTPRequestOperationManager *requestManager = [[AFHTTPRequestOperationManager alloc] init];
requestManager.responseSerializer.acceptableContentTypes = [requestManager.responseSerializer.acceptableContentTypes setByAddingObject:@"application/json"];
requestManager.requestSerializer = [AFJSONRequestSerializer serializer];
[requestManager POST:urlString parameters:aParameters constructingBodyWithBlock:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"%@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)
其中aParameters是具有以下内容的NSDictionary:
NSDictionary *urlParams = @{@"username" : anUser.userName, @"password" : anUser.password};
Run Code Online (Sandbox Code Playgroud)
当我使用用户输入"anUsername"和"aPassword"从我的应用程序发出请求时,我在servlet中获取了以下日志:
--Boundary+5738A89B2C391231
Content-Disposition: form-data; name="password"
aPassword
--Boundary+5738A89B2C391231
Content-Disposition: form-data; name="username"
anUsername
--Boundary+5738A89B2C391231--
multipart/form-data; boundary=Boundary+5738A89B2C391231
Run Code Online (Sandbox Code Playgroud)
我的印象是使用AFJSONRequestSerializer会以适当的格式发送我的请求,但是正如日志所示,它是多部分/表单数据.解析这种请求真的很难(对我来说)(我在服务器端用Java解析它),所以我的问题是:是否有可能在我的请求正文中发送一个json?像这样的东西:
{
"userName" : "anUsername",
"password" : "aPassword"
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
好的,首先,谢谢大家的大量活动.似乎我没有把我的问题说得太好,因为许多答案(正确地)都停留在id输入参数上,并且遵循不良的设计模式,但它仅仅是一个例子.我将在我的问题中添加一些上下文:
doSomethingWithParameter:,需要特定实例作为输入参数SpecificClass作为输入参数的实例调用有了这些断言,这是我的假设:鉴于您知道参数的类型,在类型检查和铸造方面没有任何好处,只是为了更加安全.
假设我的协议声明中有一个通用方法,它接受一个id输入参数:
@protocol MyProtocol <NSObject>
- (void)doSomethingWithParameter:(id)inputParameter;
@end
Run Code Online (Sandbox Code Playgroud)
在符合的类中MyProtocol,我通常更喜欢将类型inputParameter显式化为:
- (void)doSomethingWithParameter:(SpecificClass *)inputParameter
{
/... do something with param
}
Run Code Online (Sandbox Code Playgroud)
偶尔我会因为选择此解决方案而受到批评,而不是以下方面:
- (void)doSomethingWithParameter:(id)inputParameter
{
if ([inputParameter isKindOfClass:[SpecificClass class]]) {
SpecificClass *myInstance = (SpecificClass *)inputParameter;
/... do something with param
}
}
Run Code Online (Sandbox Code Playgroud)
我真的更喜欢第一个版本,因为它清楚地说明了我的实例所期望的参数.它更简洁,更清晰.我通常不认为我可以从类型检查/铸造中获得太多收益.
我的问题:从编码标准的角度来看,哪一个是更好的解决方案?第一个有缺点吗?
我试图将数据从表视图控制器传递到详细视图控制器.我的表的每个条目都可以正常工作,除了一个.这是prepareForSegue方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"showDetails"]) {
NSIndexPath *indexPath = [[self tableView] indexPathForSelectedRow];
NSDictionary *notification = [[self notifications] objectAtIndex:[indexPath row]];
NRDetailViewController *destViewController = [segue destinationViewController];
[destViewController setDate:[notification objectForKey:@"date"]];
[destViewController setFrom:[notification objectForKey:@"from"]];
[destViewController setIden:[notification objectForKey:@"identifier"]];
[destViewController setPriority:[notification objectForKey:@"priority"]];
[destViewController setSubject:[notification objectForKey:@"subject"]];
[destViewController setMessage:[notification objectForKey:@"text"]];
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的详细视图界面:
#import <UIKit/UIKit.h>
@interface NRDetailViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *dateField;
@property (weak, nonatomic) IBOutlet UITextField *fromField;
@property (weak, nonatomic) IBOutlet UITextField *idenField;
@property (weak, nonatomic) IBOutlet UITextField *prioField;
@property …Run Code Online (Sandbox Code Playgroud) ios ×6
objective-c ×3
iphone ×2
android ×1
apple-watch ×1
autolayout ×1
casting ×1
dynamic ×1
fragment ×1
http-post ×1
ios7 ×1
json ×1
segue ×1
swift ×1
types ×1
uitableview ×1
watchkit ×1
watchos-2 ×1