我在UITableView
中有一个名单。 tableView的委托是一个viewController。我使用IBAction
来调用UIAlertView
(带有文本字段),以便用户可以向tableView添加另一个名称:
- (IBAction)addGuest:(UIButton *)sender
{
// open a alert with text field, cancel and add button
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Add New Guest" message:@"Example: John Doe" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add", nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
}
当用户点击UIAlertView
中的“添加”按钮时,我会将文本字段中的信息写入plist:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Guests.plist"];
[self.guestList addObject:[[alertView textFieldAtIndex:0] text]];
NSMutableDictionary *plistDict = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:guestList, nil] forKeys:[NSArray arrayWithObjects:@"nameList", nil]];
NSString *error = nil;
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
if (plistData) {
[plistData writeToFile:plistPath atomically:YES];
} else {
NSLog(@"Error in saveData: %@", error);
}
}
}
此时,我想对tableView进行重新加载(在上面的方法中),以便显示新添加的名称。我已将UIAlertView
的委托设置为自己。
但是,[self.tableView reloadData]
不起作用,因为在此方法中无法识别tableView。我尝试了很多变化,但我无法工作。
我该怎么做?
谢谢!
答案 0 :(得分:1)
每个视图控制器都有一个视图。表视图的委托控制器视图是否为表视图?如果是这样,请尝试:
[((UITableView *) self.view) reloadData]
在didDismissWithButtonIndex方法的实现中。如果tableView的委托控制器也是 UIAlertView的委托,则上述仅有效。你可以通过以下方式实现这一目标:`
@interface SomeViewController : UIViewController
<UITableViewDataSource,
UITableViewDelegate,
UIAlertViewDelegate> { /* .... */ } /* ... */ @end
或更好(但并非总是可能):
@interface SomeViewController : UITableViewController // <- Now you'll have self.tableView
< UIAlertViewDelegate> { /* .... */ } /* ... */ @end
答案 1 :(得分:0)
为了使用[tableview reloadData]方法,你应该实现
uitableviewdelegate,uitabbleviewdatasource
reloadData works only if you implement the following three delegate methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
您可以使用委托方法
,而不是使用- (IBAction)addGuest:(UIButton *)
发件人
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
注意:别忘了将委托和数据源设置为tableview到viewcontroller
答案 2 :(得分:0)
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSString * buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Add"]) {
[tableviewName reloadData]; } }
答案 3 :(得分:0)
为表视图创建一个插座,在界面构建器
中连接它在.h
IBOutlet UITableView *exercisesTable;
.m类中的
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
}
else if (buttonIndex == 1)
{
// your code
[exercisesTable reloadData];
}
}