2016-07-16 10 views
0
// 
// SignStepRemindView.m 
// LTPMS 
// 
// Created by longdw on 16/7/14. 
// Copyright © 2016年 longdw. All rights reserved. 
// 

#define kPadding 10 

#import "SignStepRemindView.h" 
#import "SignStepRemindCell.h" 
#import "UITableViewCell+AutoHeightForCell.h" 
#import "NSString+Frame.h" 

@interface SignStepRemindView() <UITableViewDelegate, UITableViewDataSource, UIScrollViewDelegate> 
@property(nonatomic, strong) UIWindow *window; 
@property(nonatomic, strong) UIView *backIv; 

@property(nonatomic, weak) UIView *contentView; 
@property(nonatomic, weak) UITableView *tableView; 
@property(nonatomic, weak) UIScrollView *scrollView; 
@property(nonatomic, weak) UIView *remindContentView; 

@property(nonatomic, weak) UIButton *leftBtn; 
@property(nonatomic, weak) UIButton *rightBtn; 
@property(nonatomic, weak) UILabel *titleLabel; 

@property(nonatomic, assign) NSInteger step; 

@property(nonatomic, weak) UITextField *textField; 
@end 

@implementation SignStepRemindView 

- (instancetype)init 
{ 
    if (self = [super init]) { 

     self.backgroundColor = kGlobalBgColor; 

     [self addViews]; 
    } 
    return self; 
} 

- (void)addViews 
{ 
    self.layer.cornerRadius = 4; 
    self.layer.masksToBounds = YES; 

    UILabel *titleLabel = [[UILabel alloc] init]; 
    self.titleLabel = titleLabel; 
    titleLabel.text = @"select step"; 
    titleLabel.textColor = kNavColor; 
    titleLabel.font = [UIFont systemFontOfSize:16]; 
    [self addSubview:titleLabel]; 

    WEAKSELF 
    [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.top.left.equalTo(weakSelf).offset(kPadding); 
     make.height.mas_equalTo(30); 
    }]; 

    UIView *bottomView = [[UIView alloc] init]; 
    [self addSubview:bottomView]; 
    [bottomView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.bottom.equalTo(weakSelf).offset(-kPadding * 0.5); 
     make.left.equalTo(weakSelf); 
     make.right.equalTo(weakSelf).offset(-kPadding); 
     make.height.mas_equalTo(40); 
    }]; 

    UIButton *rightBtn = [[UIButton alloc] init]; 
    self.rightBtn = rightBtn; 
    rightBtn.titleLabel.font = [UIFont boldSystemFontOfSize:17]; 
    [rightBtn setTitleColor:kNavColor forState:UIControlStateNormal]; 
    [rightBtn setTitle:@"next" forState:UIControlStateNormal]; 
    [rightBtn addTarget:self action:@selector(next) forControlEvents:UIControlEventTouchUpInside]; 
    [bottomView addSubview:rightBtn]; 
    [rightBtn mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.right.equalTo(bottomView); 
     make.height.equalTo(bottomView); 
     make.centerY.equalTo(bottomView.mas_centerY); 
     make.width.mas_equalTo(60); 
    }]; 

    UIButton *leftBtn = [[UIButton alloc] init]; 
    self.leftBtn = leftBtn; 
    leftBtn.titleLabel.font = [UIFont boldSystemFontOfSize:17]; 
    [leftBtn setTitleColor:kNavColor forState:UIControlStateNormal]; 
    [leftBtn setTitle:@"cancel" forState:UIControlStateNormal]; 
    [leftBtn addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchUpInside]; 
    [bottomView addSubview:leftBtn]; 
    [leftBtn mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.right.equalTo(rightBtn.mas_left).offset(-kPadding); 
     make.height.equalTo(bottomView); 
     make.centerY.equalTo(bottomView.mas_centerY); 
     make.width.mas_equalTo(60); 
    }]; 

    UIScrollView *scrollView = [[UIScrollView alloc] init]; 
    self.scrollView = scrollView; 
    scrollView.delegate = self; 
    scrollView.pagingEnabled = YES; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    [self addSubview:scrollView]; 
    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.top.equalTo(titleLabel.mas_bottom).offset(kPadding); 
     make.bottom.equalTo(bottomView.mas_top); 
     make.left.equalTo(weakSelf).offset(kPadding); 
     make.right.equalTo(weakSelf).offset(-kPadding); 
    }]; 

    UIView *contentView = [[UIView alloc] init]; 
    self.contentView = contentView; 
    [self.scrollView addSubview:contentView]; 
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.edges.equalTo(scrollView); 
     make.height.equalTo(scrollView); 
    }]; 

    //first 
    UITableView *tableView = [[UITableView alloc] init]; 
    tableView.backgroundColor = [UIColor redColor]; 
    self.tableView = tableView; 
// tableView.delegate = self; 
// tableView.dataSource = self; 

    UIView *view = [UIView new]; 
    view.backgroundColor = [UIColor clearColor]; 
    [tableView setTableFooterView:view]; 
    [contentView addSubview:tableView]; 
    [tableView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.top.bottom.equalTo(contentView); 
     make.width.equalTo(weakSelf.scrollView); 
    }]; 

    //second 
    UIScrollView *remindScrollView = [[UIScrollView alloc] init]; 
    [contentView addSubview:remindScrollView]; 
    [remindScrollView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.equalTo(tableView.mas_right); 
     make.top.bottom.equalTo(contentView); 
     make.width.equalTo(weakSelf.scrollView); 
    }]; 

    UIView *remindContentView = [[UIView alloc] init]; 
    self.remindContentView = remindContentView; 
    [remindScrollView addSubview:remindContentView]; 
    [remindContentView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.edges.equalTo(remindScrollView); 
     make.width.equalTo(remindScrollView); 
    }]; 

    [contentView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.right.equalTo(remindScrollView.mas_right); 
    }]; 

    [self addRemindView]; 
} 

- (void)addRemindView 
{ 
    UIView *editView = [[UIView alloc] init]; 
    editView.userInteractionEnabled = YES; 
    [self.remindContentView addSubview:editView]; 
    WEAKSELF 
    [editView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.top.equalTo(weakSelf.remindContentView).offset(kPadding); 
     make.right.equalTo(weakSelf.remindContentView).offset(-kPadding); 
     make.height.mas_equalTo(40); 
    }]; 

    NSString *title = @"content:"; 
    UIFont *font = [UIFont systemFontOfSize:15]; 
    CGFloat width = [title boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) attributes:@{ NSFontAttributeName : font }].width; 
    UILabel *titleLabel = [[UILabel alloc] init]; 
    titleLabel.textColor = [UIColor blackColor]; 
    titleLabel.font = font; 
    titleLabel.text = title; 
    [editView addSubview:titleLabel]; 

    UITextField *textField = [[UITextField alloc] init]; 
    self.textField = textField; 
    [self.textField setEnabled:YES]; 
// [textField becomeFirstResponder]; 
    textField.borderStyle = UITextBorderStyleRoundedRect; 
    textField.backgroundColor = [UIColor whiteColor]; 
    [editView addSubview:textField]; 

    [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.equalTo(editView); 
     make.centerY.equalTo(editView.mas_centerY); 
     make.width.mas_equalTo(width); 
    }]; 

    [textField mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.equalTo(titleLabel.mas_right); 
     make.top.bottom.equalTo(editView); 
     make.centerY.equalTo(editView.mas_centerY); 
     make.right.equalTo(editView); 
    }]; 
} 

#pragma mark - UITableView delegate 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 1; 
} 

- (SignStepRemindCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *identifier = @"Cell"; 
    SignStepRemindCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
    if (!cell) { 
     cell = [[SignStepRemindCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]; 
    } 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return [UITableViewCell cellHeightForIndexPath:indexPath tableView:tableView] + 10; 
} 


- (void)show:(UIView *)view 
{ 
// UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    UIWindow *window = view.window; 
// self.window = window; 
// window.windowLevel = UIWindowLevelNormal; 
// window.backgroundColor = [UIColor clearColor]; 
// window.alpha = 1; 
// window.hidden = NO; 
    [window makeKeyAndVisible]; 


    NSLog(@"key1-->%@, key2-->%@", [UIApplication sharedApplication].keyWindow, window); 

    UIView *backIv = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    self.backIv = backIv; 
    backIv.backgroundColor = [UIColor blackColor]; 
    backIv.alpha = 0.7; 

    [window addSubview:backIv]; 
    [window addSubview:self]; 

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height * 0.7; 

    [self mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.mas_equalTo(30); 
     make.right.mas_equalTo(-30); 
     make.height.mas_equalTo(screenHeight); 
     make.center.equalTo(window); 
    }]; 
} 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 


    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
} 

- (void)dismiss 
{ 
    [self.backIv removeFromSuperview]; 
    [self removeFromSuperview]; 
} 

#pragma mark - 滚动代理 
#pragma mark scrollview减速完毕就会调用 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 

    //获取当前页码 
    int pageNo = scrollView.contentOffset.x/scrollView.frame.size.width; 
    if (pageNo == 0) { 
     [self.leftBtn setTitle:@"cancel" forState:UIControlStateNormal]; 
     [self.rightBtn setTitle:@"next" forState:UIControlStateNormal]; 

     self.titleLabel.text = @"select step"; 

     self.step = 0; 
    } else { 
     [self.leftBtn setTitle:@"pre" forState:UIControlStateNormal]; 
     [self.rightBtn setTitle:@"finish" forState:UIControlStateNormal]; 

     self.titleLabel.text = @"select person"; 

     self.step = 1; 
    } 
} 


- (void)cancel 
{ 
    if (self.step == 0) {//cancel 
     [self dismiss]; 
    } else {//pre 
     self.leftBtn.enabled = NO; 
     self.rightBtn.enabled = NO; 
     CGPoint offset = self.scrollView.contentOffset; 
     offset.x -= self.scrollView.frame.size.width; 
     [UIView animateWithDuration:0.25 animations:^{ 

      self.scrollView.contentOffset = offset; 

     } completion:^(BOOL finished) { 
      [self.leftBtn setTitle:@"cancel" forState:UIControlStateNormal]; 
      [self.rightBtn setTitle:@"next" forState:UIControlStateNormal]; 

      self.titleLabel.text = @"select step"; 

      self.step = 0; 

      self.leftBtn.enabled = YES; 
      self.rightBtn.enabled = YES; 
     }]; 
    } 
} 


- (void)next 
{ 
    if (self.step == 0) {//next 
     self.leftBtn.enabled = NO; 
     self.rightBtn.enabled = NO; 
     CGPoint offset = self.scrollView.contentOffset; 
     offset.x += self.scrollView.frame.size.width; 
     [UIView animateWithDuration:0.25 animations:^{ 

      self.scrollView.contentOffset = offset; 

     } completion:^(BOOL finished) { 
      [self.leftBtn setTitle:@"pre" forState:UIControlStateNormal]; 
      [self.rightBtn setTitle:@"finish" forState:UIControlStateNormal]; 

      self.titleLabel.text = @"select person"; 

      self.step = 1; 

      self.leftBtn.enabled = YES; 
      self.rightBtn.enabled = YES; 

     }]; 
    } else {//finish 

    } 
} 

- (void)dealloc 
{ 
// NSArray *subViews = [self.window subviews]; 
// for (id obj in subViews) { 
//  [obj removeFromSuperview]; 
// } 
// [self.window resignKeyWindow]; 
// [self.window removeFromSuperview]; 
// self.window = nil; 
} 

@end 

dies ist die ZelleUITextField können nicht bearbeitet werden, konzentrieren sich

#define kPadding 10 
#import "SignStepRemindCell.h" 

@interface SignStepRemindCell() 
@property(nonatomic, strong) UIImage *unSelectedImage; 
@property(nonatomic, strong) UIImage *selectedImage; 
@end 

@implementation SignStepRemindCell 

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     self.unSelectedImage = [UIImage imageNamed:@"contact_icon_checkbox"]; 
     self.selectedImage = [UIImage imageNamed:@"contact_icon_checkbox_selected_all"]; 
     [self addViews]; 
    } 
    return self; 
} 

- (void)addViews 
{ 
    UIImageView *checkImageView = [[UIImageView alloc] initWithImage:self.selectedImage]; 
    [self.contentView addSubview:checkImageView]; 

    UILabel *titleLabel = [[UILabel alloc] init]; 
    titleLabel.textColor = [UIColor blackColor]; 
    titleLabel.font = [UIFont systemFontOfSize:15]; 
    [self.contentView addSubview:titleLabel]; 

    UILabel *subTitleLabel = [[UILabel alloc] init]; 
    subTitleLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    subTitleLabel.numberOfLines = 0; 
    subTitleLabel.textColor = [UIColor blackColor]; 
    subTitleLabel.font = [UIFont systemFontOfSize:15]; 
    [self.contentView addSubview:subTitleLabel]; 

    WEAKSELF 
    [checkImageView mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.left.equalTo(weakSelf.contentView).offset(kPadding); 
     make.centerY.equalTo(weakSelf.contentView.mas_centerY); 
     make.size.mas_equalTo(weakSelf.selectedImage.size); 
    }]; 

    [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.top.equalTo(weakSelf.contentView).offset(kPadding); 
     make.left.equalTo(checkImageView.mas_right).offset(kPadding); 
     make.right.equalTo(weakSelf.contentView).offset(-kPadding); 
     make.height.mas_greaterThanOrEqualTo(0); 
    }]; 


    [subTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.top.equalTo(titleLabel.mas_bottom).offset(5); 
     make.left.equalTo(titleLabel.mas_left); 
     make.right.equalTo(weakSelf.contentView).offset(-kPadding); 
     make.height.mas_greaterThanOrEqualTo(0); 
    }]; 

    titleLabel.text = @"num:2"; 

    NSString *text = @"<strong>test:</strong>test1, test2, test3, test4"; 
    NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[text dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; 
    subTitleLabel.attributedText = attrStr; 
} 

@end 

Ich benutze diese benutzerdefinierte Ansicht in vc

SignStepRemindView *stepRemindView = [[SignStepRemindView alloc] init]; 
[stepRemindView show:self.view]; 

Meine Frage ist die UITextField können nicht bearbeitet werden und berühren, Die Tastatur wurde nie angezeigt, aber wenn ich [textField wirdFirstResponder] verwende, kann ich die Tastatur einblenden, aber der Cursor wird nicht angezeigt. Vielen Dank.

Antwort

0

Ich habe es gelöst.Der Grund ist, dass Einschränkungen nicht vollständig sind. Fügen Sie den folgenden Code am Ende der Methode hinzu: addRemindView

[self.remindContentView mas_makeConstraints:^(MASConstraintMaker *make){ 
    make.bottom.equalTo(editView.mas_bottom).offset(20); 
}]; 
Verwandte Themen