我已用其他几种语言编程,但这基本上是我的第一个ios应用程序,我正在努力正确实现UITableView。 阅读完文档之后,最常见的方法是创建一个类,它是UITableViewController的子类。我已经完成了这个,我已经实现了所有数据源协议方法以及委托协议中的行选择方法,并为其提供了三个属性。
第一个是tableview中的行数,
第二个是要在表视图中显示为标签的项目数组,
最后有一个属性来保存所选行的标签文本。
选择行后,我设置了包含此标签的属性,然后使用[self.view removeFromSuperView]
从视图中删除表格。
以上不是我应用中的唯一视图。该应用程序是一个颜色选择器,从学校,所以主视图包含操纵显示颜色的所有控件。
在对UITableViewController进行子类化之后我做了什么,在我的主视图控制器中创建了这个子类的实例,并使其成为一个属性。因此,在主视图上是一个调用按钮,允许用户从以前保存的颜色列表中进行选择。单击此按钮时,将调用此IBAction方法
-(IBAction)swithToSavedColorsView:(id)sender {
self.savedColorTable.numberOfRows = self.dictionaryOfSavedColors.count;
NSLog( @"Count in switch view is %d", self.dictionaryOfSavedColors.count );
[ self.view addSubview:self.savedColorTable.view ];
}
这将显示可用保存颜色的列表,并使用
响应行选择- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath {
self.textFromColorSelection = [ [ NSString alloc ] init ];
UITableViewCell *cell = [ tableView cellForRowAtIndexPath:indexPath ];
self.textFromColorSelection = cell.textLabel.text;
NSLog(@"The value of selection is %@ ", self.textFromColorSelection );
[ self.view removeFromSuperview ]; // Go back to main screen.
}
当我编写这段代码时,我感到非常感觉我从一开始就以完全错误的方式创建了UITableView。如果我在设置这些对象之间进行通信,请告诉我是否做错了。
我实际上试图解决的问题是在我打电话后的上述方法中
[ self.view removeFromSuperView ]
,我的其他观点如何知道何时发生这种情况?当UITableView关闭时我想要做的是让我的另一个视图从我创建的实例中获取label属性,并使用该标签从数据库中检索信息。
感谢您的帮助,非常感谢。
答案 0 :(得分:0)
在您的子类UITableViewController
中,应在删除视图后调用viewWillDisappear
和viewDidDisappear
。尝试在视图消失时发送通知(查看NSNotificationCenter
)。
答案 1 :(得分:0)
如果您需要多个控制器来响应解雇表,您可能希望在viewWillDisappear或viewDidDisappear中使用NSNotificationCenter。您更有可能从viewController呈现,并且只有viewController正在等待学习选择的颜色。我建议使用委托/协议模式处理它。
将这样的内容添加到@interface行上方的颜色选择表myColorPickTableController.h文件中:
@class myColorPickTableController;
@protocol myColorPickTableControllerDelegate
-(void)myColorPickTableControllerDidSelectColor:(UIColor *)selectedColor sender:(myColorPickTableController *)sender;
@end
在该标题中添加一个属性,以存储对委托的引用(等待听到所选颜色的控制器)。
@property(nonatomic, unsafe_unretained)id<myColorPickTableControllerDelegate> delegate;
现在,替换
行[ self.view removeFromSuperview ]; // Go back to main screen.
与
[delegate myColorPickTableControllerDidSelectColor:[UIColor whateverColorWasPicked] sender:self]; // Tell main screen user picked a color
现在在呈现控制器中,您需要通过添加到接口行来符合协议
@interface myPresentingController : UIWhateverControllerIAm <myColorPickTableDelegate> // Add that part between <>
现在,在myPresentingController.m中实现方法
-(void)myColorPickTableControllerDidSelectColor:(UIColor *)selectedColor sender:(myColorPickTableController *)sender
{
[self saveTheSelectedColor:selectedColor];
[sender.view removeFromSuperview]; // I am not so sure about that, should be presenting, maybe modally or use navigation controller. Should work thought, not my first choice.
sender = nil; // Just for good measure
}
最后,请记住在创建时使您的呈现控制器成为myColorPickTableController的委托。将委托设置为自我,如此
myColorPickTableController *pickTable = [myColorPickTableController alloc] init];
pickTable.delegate = self.