当用户点击我的应用程序中的特定行时,如何弹出一个窗口?

时间:2012-04-02 11:01:27

标签: iphone ios uitableview iphone-sdk-3.0

当用户点击表格视图中的特定字段时,如何显示弹出窗口。 它应该弹出一个窗口,它应该显示用户联系信息。 我不想在这里使用导航栏控制器。 请帮助我

3 个答案:

答案 0 :(得分:1)

我已经编写了带有DatePicker的UIPopOverController代码作为示例。请参考此示例并根据需要进行设置

   -(IBAction)tDriveBtnPressed:(id)sender
{
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    txtDate.text = [NSString stringWithFormat:@"%@",
                    [df stringFromDate:[NSDate date]]];
    [df release];

    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 300, 44)];
    pickerToolbar.barStyle = UIBarStyleBlackOpaque;
    [pickerToolbar sizeToFit];
    NSMutableArray *barItems = [[NSMutableArray alloc] init];
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pickerDone:)];
    [barItems addObject:doneBtn];
    [doneBtn release];
    [pickerToolbar setItems:barItems animated:YES];
    [barItems release];

    datePicker = [[UIDatePicker alloc] init];
    datePicker.datePickerMode = UIDatePickerModeDate;

    CGRect pickerRect = datePicker.bounds;
    datePicker.bounds = pickerRect;

    UIViewController* popoverContent = [[UIViewController alloc] init];
    UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 344)];
    popoverView.backgroundColor = [UIColor whiteColor];

    datePicker.frame = CGRectMake(0, 44, 320, 300);
    [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];
    [popoverView addSubview:pickerToolbar];
    [popoverView addSubview:datePicker];
    popoverContent.view = popoverView;

    //resize the popover view shown
    //in the current view to the view's size
    popoverContent.contentSizeForViewInPopover = CGSizeMake(320, 244);

    //create a popover controller
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    CGRect popoverRect = [self.view convertRect:[tDriveBtn frame] 
                                       fromView:[tDriveBtn superview]];

    popoverRect.size.width = MIN(popoverRect.size.width, 100) ; 
    popoverRect.origin.x  = popoverRect.origin.x; 
    // popoverRect.size.height  = ; 

    [popoverController 
     presentPopoverFromRect:popoverRect
     inView:self.view 
     permittedArrowDirections:UIPopoverArrowDirectionAny
     animated:YES];


    //release the popover content
    [popoverView release];
    [popoverContent release];

}
-(void)dateChange:(id)sender
{
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    txtDate.text= [NSString stringWithFormat:@"%@",
                   [df stringFromDate:datePicker.date]];
    [df release];
}
- (void)pickerDone:(id)sender
{
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    txtDate.text= [NSString stringWithFormat:@"%@",
                   [df stringFromDate:datePicker.date]];
    [df release];

    if (popoverController != nil) {
        [popoverController dismissPopoverAnimated:YES];
        self.popoverController=nil;
    }  
}

答案 1 :(得分:1)

您可以使用presentModalViewController方法显示新的viewController。我这样使用它:

- (IBAction)addNewBuidling:(id)sender
 {

    NewBuilding *new=[[NewBuilding alloc]initWithNibName:@"NewBuilding" bundle:nil];
           new.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    new.modalPresentationStyle=UIModalPresentationFormSheet;
    [self.navigationController presentModalViewController:new animated:YES];

    new.view.superview.frame = CGRectMake(0, 0, 357 ,117);//it's important to do this after. Take a frame size exactly of your new viewController's size.
    new.view.superview.center = self.view.center;
    [new release];
 }

这就是我的NewBuilding viewController将出现在屏幕上的方式。

enter image description here

  

编辑1:

presentModalViewController参考文献中写道:“在iPhone和iPod touch设备上,modalViewController的视图始终全屏显示。”因此对于iPhone来说,它可能无法满足您的需求。

答案 2 :(得分:0)

如果要显示较少的详细信息,则可以使用以下选项。 在.h文件中声明下面的代码

UIWindow *alertWindow;

在.m文件中写下以下代码。

    alertWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // you must release the window somewhere, when you do not need it anymore
    alertWindow.windowLevel = UIWindowLevelAlert; // puts it above the status bar
    alertWindow.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    /*CUSTOM VIEW obj*/.center = CGPointMake(alertWindow.frame.size.width/2, alertWindow.frame.size.height/2);
    [alertWindow addSubview:/*PUT YOUR CUSTOM VIEW HERE*/];
    [alertWindow setHidden:NO];

此代码显示自定义视图,如UIAlertView。

您将上面的代码放在UITableView Delegate方法中。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {}

隐藏窗口

[alertWindow setHidden:YES];
[alertWindow release]; alertWindow = nil;