Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ViewController用户交互上的.xib文件初始化UIView不工作_Ios_Objective C_Xcode_Storyboard_Xib - Fatal编程技术网

Ios ViewController用户交互上的.xib文件初始化UIView不工作

Ios ViewController用户交互上的.xib文件初始化UIView不工作,ios,objective-c,xcode,storyboard,xib,Ios,Objective C,Xcode,Storyboard,Xib,我有一个故事板,带有一个使用导航控制器和TabBarController的ViewController。几天来我一直在努力解决这个问题 问题: int startPos = self.navigationController.navigationBar.frame.size.height+20; inviteFriendsView = [[InviteFriendsEmailAddressesView alloc] init]; NSArray *nib = [[NSBun

我有一个故事板,带有一个使用导航控制器和TabBarController的ViewController。几天来我一直在努力解决这个问题

问题:

   int startPos = self.navigationController.navigationBar.frame.size.height+20;
    inviteFriendsView = [[InviteFriendsEmailAddressesView alloc] init];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"InviteFriendsEmailAddressesView" owner:self options:nil];
    inviteFriendsView = (InviteFriendsEmailAddressesView*)[nib objectAtIndex:0];

    [self.view addSubview:inviteFriendsView];
    [inviteFriendsView setDelegate:self];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView customizeView];
    [inviteFriendsView setAlpha:0.0];
    [inviteFriendsView setY:startPos];
- (IBAction)inviteFriendsButtonTapped:(id)sender {
    [self.view bringSubviewToFront:inviteFriendsView];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView animate];
}
通常情况下,我无法与视图交互。。。这包括滚动、点击文本字段和按下任何按钮。有东西阻止我与新加载的UIView交互

我尝试过使用init方法,也尝试过使用init with frame方法。虽然视图一直在显示,但这可能不是问题所在

我已经尝试重新制作整个xib文件,重新编码.h和.m文件,并重新连接视图上的所有插座

我被卡住了

在视图控制器中,我正在加载一个UIView,其中包含单独的.xib文件和单独的.h和.m文件

我就是这样做的:

在我的ViewController中的ViewDidDisplay方法:

   int startPos = self.navigationController.navigationBar.frame.size.height+20;
    inviteFriendsView = [[InviteFriendsEmailAddressesView alloc] init];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"InviteFriendsEmailAddressesView" owner:self options:nil];
    inviteFriendsView = (InviteFriendsEmailAddressesView*)[nib objectAtIndex:0];

    [self.view addSubview:inviteFriendsView];
    [inviteFriendsView setDelegate:self];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView customizeView];
    [inviteFriendsView setAlpha:0.0];
    [inviteFriendsView setY:startPos];
- (IBAction)inviteFriendsButtonTapped:(id)sender {
    [self.view bringSubviewToFront:inviteFriendsView];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView animate];
}
显示视图的iAction方法:

   int startPos = self.navigationController.navigationBar.frame.size.height+20;
    inviteFriendsView = [[InviteFriendsEmailAddressesView alloc] init];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"InviteFriendsEmailAddressesView" owner:self options:nil];
    inviteFriendsView = (InviteFriendsEmailAddressesView*)[nib objectAtIndex:0];

    [self.view addSubview:inviteFriendsView];
    [inviteFriendsView setDelegate:self];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView customizeView];
    [inviteFriendsView setAlpha:0.0];
    [inviteFriendsView setY:startPos];
- (IBAction)inviteFriendsButtonTapped:(id)sender {
    [self.view bringSubviewToFront:inviteFriendsView];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView animate];
}
以下是显示如何加载视图的.h和.m文件:

   int startPos = self.navigationController.navigationBar.frame.size.height+20;
    inviteFriendsView = [[InviteFriendsEmailAddressesView alloc] init];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"InviteFriendsEmailAddressesView" owner:self options:nil];
    inviteFriendsView = (InviteFriendsEmailAddressesView*)[nib objectAtIndex:0];

    [self.view addSubview:inviteFriendsView];
    [inviteFriendsView setDelegate:self];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView customizeView];
    [inviteFriendsView setAlpha:0.0];
    [inviteFriendsView setY:startPos];
- (IBAction)inviteFriendsButtonTapped:(id)sender {
    [self.view bringSubviewToFront:inviteFriendsView];
    [inviteFriendsView setUserInteractionEnabled:YES];
    [inviteFriendsView animate];
}
inviteFriendsMailAddressesView.h

#import <UIKit/UIKit.h>
#import "InviteFriendsViewDelegate.h"
#import "InviteFriendsNetworkContollerDelegate.h"
#import "InviteFriendsNetworkController.h"

@interface InviteFriendsEmailAddressesView : UIView <UITextFieldDelegate, UITextViewDelegate, InviteFriendsNetworkContollerDelegate, UIGestureRecognizerDelegate>

- (void) customizeView;
- (void) animate;

@property BOOL visible;
@property int y;
@property id<InviteFriendsViewDelegate> delegate;
@property (strong, nonatomic) NSArray *emails;
@property int height;

@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;
@property (weak, nonatomic) IBOutlet UILabel *inviteFriendsTitle;
@property (weak, nonatomic) IBOutlet UILabel *inviteFriendsDescription;
@property (weak, nonatomic) IBOutlet UITextField *userEmailTextField;
@property (weak, nonatomic) IBOutlet UIImageView *userEmailImageView;
@property (weak, nonatomic) IBOutlet UIButton *addFriendsButtonOutlet;
@property (weak, nonatomic) IBOutlet UILabel *emailAddressesDescription;
@property (weak, nonatomic) IBOutlet UIImageView *viewBackground;

@property (weak, nonatomic) IBOutlet UIView *emailAddressesCellBackground;
@property (weak, nonatomic) IBOutlet UILabel *emailAddressCellTextUILabel;
@property (weak, nonatomic) IBOutlet UIButton *emailAddressCancelButton;
@property (weak, nonatomic) IBOutlet UIView *emailAddressView;

@property (weak, nonatomic) IBOutlet UIButton *sendInviteButtonOutlet;
@property (weak, nonatomic) IBOutlet UIButton *progressSoFarButtonOutlet;

@property (weak, nonatomic) IBOutlet UIScrollView *viewScrollView;

@property (strong, nonatomic) InviteFriendsNetworkController *inviteFriendsNetworkController;

#pragma mark - UITextFieldDelegate Methods

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;        // return NO to disallow editing.
- (void)textFieldDidBeginEditing:(UITextField *)textField;           // became first responder
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;          // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end
- (void)textFieldDidEndEditing:(UITextField *)textField;             // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text

- (BOOL)textFieldShouldClear:(UITextField *)textField;               // called when clear button pressed. return NO to ignore (no notifications)
- (BOOL)textFieldShouldReturn:(UITextField *)textField;              // called when 'return' key pressed. return NO to ignore.

@end
#导入
#导入“InviteFriendsViewDelegate.h”
#导入“InviteFriendsNetworkContollerDelegate.h”
#导入“InviteFriendsNetworkController.h”
@接口InviteFriendsMailAddressesView:UIView
-(无效)自定义视图;
-(空)动画化;
@可见的财产;
@财产保险;
@属性id委托;
@属性(强、非原子)NSArray*电子邮件;
@属性int高度;
@属性(弱、非原子)IBUIActivityIndicator视图*activityIndicator;
@属性(弱,非原子)IBUILabel*Friendstitle;
@属性(弱、非原子)IBOUTLE UILabel*邀请好友描述;
@属性(弱,非原子)IBOutlet UITextField*userEmailTextField;
@属性(弱,非原子)ibuiImageView*userEmailImageView;
@属性(弱、非原子)IBUIButton*AddFriendsButtonoOutlet;
@属性(弱,非原子)IBOutlet UILabel*emailAddressesDescription;
@属性(弱、非原子)IBUIImageView*viewBackground;
@属性(弱、非原子)IBOUTLE UIView*emailAddressesCellBackground;
@属性(弱,非原子)IBOutlet UILabel*emailAddressCellTextUILabel;
@属性(弱,非原子)IBUIButton*emailAddressCancelButton;
@属性(弱的、非原子的)IBUIView*emailAddressView;
@属性(弱、非原子)IBUIButton*sendInviteButtonOutlet;
@属性(弱、非原子)IBUIButton*进程ArbuttonOutlet;
@属性(弱、非原子)IBOUTLE UIScrollView*viewScrollView;
@属性(强,非原子)InviteFriendsNetworkController*InviteFriendsNetworkController;
#pragma标记-UITextFieldDelegate方法
-(BOOL)textField应该开始编辑:(UITextField*)textField;//返回否以禁止编辑。
-(void)textfielddibeginediting:(UITextField*)textField;//成为第一反应者
-(BOOL)textField应取消编辑:(UITextField*)textField;//返回“是”以允许编辑停止并退出第一响应者状态。否以禁止结束编辑会话
-(void)textfielddidediting:(UITextField*)textField;//即使shouldEndEditing返回NO(例如,从窗口中删除的视图)或endEditing:YES,如果强制也可以调用
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersRange:(NSRange)range replacementString:(NSString*)string;//返回NO以不更改文本
-(BOOL)textField应清除:(UITextField*)textField;//按下清除按钮时调用。返回否以忽略(无通知)
-(BOOL)textField应返回:(UITextField*)textField;//按下“返回”键时调用。返回NO以忽略。
@结束
invitefriendsmailaddresssview.m

#import "InviteFriendsEmailAddressesView.h"
#import "UIFont+Theme.h"
#import "UIColor+Theme.h"
#import "UIImage+Theme.h"

@implementation InviteFriendsEmailAddressesView

@synthesize emails;
@synthesize visible;
@synthesize y;
@synthesize delegate;
@synthesize height;
@synthesize inviteFriendsNetworkController;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"InviteFriendsEmailAddressesView" owner:self options:nil];
        self = [nib objectAtIndex:0];
    }
    return self;
}

- (id) init {

//    self = [[[NSBundle mainBundle] loadNibNamed:@"InviteFriendsEmailAddressesView" owner:self options:nil] objectAtIndex:0];


    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(themeChanged)
                                                 name:@"New Theme Applied"
                                               object:nil];

    NSUserDefaults *properties = [NSUserDefaults standardUserDefaults];
    if([properties objectForKey:@"emails"]){
        emails = [properties objectForKey:@"emails"];
    } else {
        emails = [[NSArray alloc] init];
    }

    [self.viewScrollView setDelegate:self];

    [self.activityIndicator setHidden:YES];

    [self.viewScrollView setScrollEnabled:YES];


    //CGRect newScrollViewFrame = self.viewScrollView.frame;
    //newScrollViewFrame.origin.y = 0;
    //newScrollViewFrame.size.height = keyWindowFrame.size.height;
    //[self.viewScrollView setFrame:newScrollViewFrame];


    // get the size of the screen and set the content size to the size of the screen plus the bottom bar.
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    screenRect.size.height = screenRect.size.height-200;
    [self.viewScrollView setContentSize:CGSizeMake(screenRect.size.width, 1200)];
    [self.viewScrollView setFrame:screenRect];
    [_viewScrollView setScrollEnabled:YES];
    // 100 is the size of the tool bar.



    [self updateEmailListView];

    self.userEmailTextField.delegate = self;

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
    [self.viewScrollView addGestureRecognizer:singleTap];

    //reactionNetworkController
    inviteFriendsNetworkController = [[InviteFriendsNetworkController alloc] init];
    [inviteFriendsNetworkController setDelegate:self];

    return self;
}


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

- (void) updateEmailListView {

    // With some valid UIView *view:
    for(UIView *subview in [self.emailAddressView subviews]) {
        if([subview isHidden] == NO){
            [subview removeFromSuperview];
        }
    }

    // if we have email addresses in the email address list.
    if([emails count] > 0){
        // display and populate scrollview with email addresses.
        for(int i =0; i < [emails count]; i++){
            // every other view set it white so that it creates a grey, white, grey, white pattern.
            if(i % 2 == 0){
                [self.emailAddressesCellBackground setBackgroundColor:[UIColor whiteColor]];
            } else {
                [self.emailAddressesCellBackground setBackgroundColor:[UIColor grayColor]];
            }

            // generate our background
            UIView *newBackground = [[UIView alloc] initWithFrame:CGRectMake(
                                                                             self.emailAddressesCellBackground.frame.origin.x,
                                                                             self.emailAddressesCellBackground.frame.origin.y+self.emailAddressesCellBackground.frame.size.height*i,
                                                                             self.emailAddressesCellBackground.frame.size.width,
                                                                             self.emailAddressesCellBackground.frame.size.height)];
            [newBackground setTag:i];


            // generate our email addresses label.
            UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(
                                                                          self.emailAddressCellTextUILabel.frame.origin.x,
                                                                          self.emailAddressCellTextUILabel.frame.origin.y+self.emailAddressesCellBackground.frame.size.height*i,
                                                                          self.emailAddressCellTextUILabel.frame.size.width,
                                                                          self.emailAddressCellTextUILabel.frame.size.height)];
            [newLabel setTag:i];
            [newLabel setText:[emails objectAtIndex:i]];




            // generate the delete button and add a target for the selector when it is pressed.
            UIButton *newButton = [[UIButton alloc] initWithFrame:CGRectMake(
                                                                             self.emailAddressCancelButton.frame.origin.x,
                                                                             self.emailAddressCancelButton.frame.origin.y+self.emailAddressCancelButton.frame.size.height*i,
                                                                             self.emailAddressCancelButton.frame.size.width,
                                                                             self.emailAddressCancelButton.frame.size.height)];
            [newButton setTag:i];
            [newButton addTarget:self  action:@selector(deleteButtonPressed:) forControlEvents:UIControlEventTouchDown];
            [newButton setImage:self.emailAddressCancelButton.imageView.image forState:UIControlStateNormal];

            // attach the new views to the scrollview
            [self.emailAddressView addSubview:newBackground];
            [self.emailAddressView addSubview:newButton];
            [self.emailAddressView addSubview:newLabel];





        }

        [self.emailAddressView setHidden:NO];
    }
    // if we do not have any emails added yet.
    else {
        [self.emailAddressView setHidden:YES];
    }
}

- (void) deleteButtonPressed:(id)sender{
    int tag = [sender tag];
    NSLog(@"delete button pressed with sender tag: %i", [sender tag]);
    NSMutableArray *mutableEmails = [emails mutableCopy];
    [mutableEmails removeObjectAtIndex:tag];
    emails = mutableEmails;
    NSUserDefaults *properties = [NSUserDefaults standardUserDefaults];
    [properties setObject:emails forKey:@"emails"];
    [properties synchronize];
    [self updateEmailListView];

}

- (void) customizeView{
    [self.inviteFriendsTitle setFont:[UIFont themeFontNamed:@"viewTitleFont" ofSize:18]];
    [self.viewBackground setImage:[UIImage themeImageNamed:@"backgroundImage"]];
    [self.inviteFriendsDescription setFont:[UIFont themeFontNamed:@"normalTextFont" ofSize:13]];
    [self.emailAddressesDescription setFont:[UIFont themeFontNamed:@"normalTextFont" ofSize:13]];


    if(height == 0 &&[delegate respondsToSelector:@selector(getHeight)]){
        height = [delegate getHeight];
        [self setFrame:CGRectMake(0,
                                  -height,
                                  self.frame.size.width,
                                  height)];
    }

}


- (void) animate{
    if(visible == YES){
        [self slideOut];
        visible = NO;
    }
    else{
        [self customizeView];
        [self slideIn];
        visible = YES;
    }
    NSLog(@"is user interaction enabled in InviteFriendsView?: %hhd", self.isUserInteractionEnabled);
}


- (void) themeChanged {
    [self customizeView];
}



- (void) slideIn {
    NSLog(@"Slide in");

    [[self superview]  setUserInteractionEnabled:NO];

    [self.activityIndicator setAlpha:1.0];
    [self.activityIndicator startAnimating];

    self.alpha = 1.0;


    [UIView animateWithDuration:0.5
                     animations:^{
                         [self setFrame:CGRectMake(0,
                                                   y,
                                                   self.frame.size.width,
                                                   height)];
                     }
                     completion:^(BOOL finished) {
                         NSLog(@"DID finish slide in");
                     }];

}

- (void) slideOut{
    NSLog(@"Slide out");

    if([delegate respondsToSelector:@selector(getY)]){
        y = [delegate getY];
    }

    [self setViewScrollView:self.viewScrollView];
    [self setUserInteractionEnabled:YES];
    [self.viewScrollView setUserInteractionEnabled:YES];
    [self.viewScrollView setScrollEnabled:YES];
    [self.viewScrollView setScrollsToTop:YES];



    [UIView animateWithDuration:0.5
                     animations:^{
                         [self setFrame:CGRectMake(0,
                                                   -height+y,
                                                   self.frame.size.width,
                                                   height)];
                     }
                     completion:^(BOOL finished) {
                         self.alpha = 0.0;
                         [[self superview]  setUserInteractionEnabled:YES];
                     }];
}

#pragma mark - UITextFieldDelegate Methods

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    return true;
}
// return NO to disallow editing.

- (void)textFieldDidBeginEditing:(UITextField *)textField{

}
// became first responder

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    return true;
}
// return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end

- (void)textFieldDidEndEditing:(UITextField *)textField{

}
// may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    return true;
}
// return NO to not change text

- (BOOL)textFieldShouldClear:(UITextField *)textField{
    return true;
}
// called when clear button pressed. return NO to ignore (no notifications)

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [self addFriendToInviteButtonPressed:self];
    [textField setText:@""];
    return true;
}
// called when 'return' key pressed. return NO to ignore.


#pragma mark - Button Action Pressed Methods

- (IBAction)addFriendToInviteButtonPressed:(id)sender {
    NSMutableArray *mutableEmails = [emails mutableCopy];
    [mutableEmails addObject:self.userEmailTextField.text];
    NSLog(@"mutableEmails: %@", mutableEmails);

    NSUserDefaults *properties = [NSUserDefaults standardUserDefaults];
    [properties setObject:mutableEmails forKey:@"emails"];
    [properties synchronize];
    emails = mutableEmails;
    [self updateEmailListView];
    [self.userEmailTextField setText:@""];
    [self.userEmailTextField resignFirstResponder];
}

- (IBAction)sendInviteButtonPressed:(id)sender {
    // send a POST request to the server with the emails.
    NSString *stringEmails = [[emails valueForKey:@"description"] componentsJoinedByString:@""];
    NSLog(@"stringEmails: %@", stringEmails);
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    int site = 0;
    if([[defaults objectForKey:@"Theme"] isEqualToString:@"BOMG"]){
        site = 1;
    }

    [self.inviteFriendsNetworkController inviteFriendsWithAddressList:emails AndSite:site];
}

- (IBAction)progressButtonPressed:(id)sender {
}

#pragma mark - InviteFriendsNetworkControllerDelegateMethods

- (void) didSendAddressList:(NSDictionary *)response{

}

- (void) failedTosendAddressList{

}

#pragma mark - UIGestureRecognizerDelegate methods

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    [self.userEmailTextField resignFirstResponder];
}


@end
#导入“inviteFriendsMailAddresssView.h”
#导入“UIFont+Theme.h”
#导入“UIColor+Theme.h”
#导入“UIImage+Theme.h”
@实现友好的电子邮件地址视图
@综合电子邮件;
@合成可见光;
@合成y;
@综合代表;
@综合身高;
@综合网络控制器;
-(id)initWithFrame:(CGRect)帧
{
self=[super initWithFrame:frame];
如果(自我){
//初始化代码
NSArray*nib=[[NSBundle mainBundle]loadNibNamed:@“invitefriendsemailaddresssview”所有者:自选项:nil];
self=[nib对象索引:0];
}
回归自我;
}
-(id)init{
//self=[[NSBundle mainBundle]loadNibNamed:@“invitefriendsemailaddresssview”所有者:self选项:nil]objectAtIndex:0];
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@selector(themeChanged)
名称:@“已应用新主题”
对象:无];
NSUserDefaults*属性=[NSUserDefaults standardUserDefaults];
如果([properties objectForKey:@“emails”]){
电子邮件=[properties objectForKey:@“电子邮件”];
}否则{
电子邮件=[[NSArray alloc]init];
}
[self.viewScrollView setDelegate:self];
[self.activityIndicator setHidden:是];
[self.viewScrollView设置可滚动:是];
//CGRect newScrollViewFrame=self.viewScrollView.frame;
//newScrollViewFrame.origin.y=0;
//newScrollViewFrame.size.height=keyWindowFrame.size.height;
//[self.viewScrollView设置框:newScrollViewFrame];
//获取屏幕大小,并将内容大小设置为屏幕大小加上底部栏。
CGRect screenRect=[[UIScreen mainScreen]边界];
screenRect.size.height=screenRect.size.height-200;
[self.viewScrollView setContentSize:CGSizeMake(screenRect.size.width,1200)];
[self.viewScrollView设置框架:screenRect];
[_VIEWSCROLLVIEWSETSCROLLENABLED:是];
//100是工具栏的大小。
[自我更新邮件列表视图];
self.userEmailTextField.dele