1

我有一个名称列表UITableView。tableView 的委托是一个 viewController。我使用 anIBAction来调用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.

但是,[self.tableView reloadData]不起作用,因为在此方法中无法识别 tableView。我已经尝试了很多变化,但我无法得到任何工作。

我该怎么做呢 ?

谢谢!

4

4 回答 4

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
于 2012-04-19T03:47:23.360 回答
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

于 2012-04-19T05:21:43.307 回答
0

为您的表格视图创建一个出口,在界面构建器中连接它

在.h

IBOutlet UITableView *exercisesTable;

在 .m 类中

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {   



    }
    else if (buttonIndex == 1)
    {
        // your code
        [exercisesTable reloadData];
    }
}
于 2012-04-19T11:05:31.640 回答
0

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ NSString *buttonTitle=[alertView buttonTitleAtIndex:buttonIndex];

if ([buttonTitle isEqualToString:@"Add"]) {

[tableviewName reloadData]; } }

于 2012-04-19T08:56:55.553 回答