체인 개발(iOS 컨트롤 활용)

4149 단어

전언

  • 체인식 개발을 접한 것은 Mansory를 사용할 때 글씨를 소 X라고 느꼈기 때문에 각종 체인식 프로그래밍의 사상적 설명과 사례를 보기 시작했고 자주 사용하는 UI 컨트롤러에 대해 봉인 시험을 실시했다. 다음에 코드를 하나하나 열거하여 앞으로 더 잘 운반할 수 있도록 했다.

  • 체인 프로그래밍의 이해득실


    장점

  • 코드가 간결하다.
  • 개발 속도 향상
  • 가독성 향상
  • 결점


    비교적 강한 코드 능력이 필요하다(hahahahahaha 자뻑 일파)

    실례를 운용하다


    TableView


    UItableView의 category를 만들고 새 파일에 다음 코드를 추가합니다
  • .h 파일
  •  @interface UITableView (ChainStyle)
    
    + (UITableView *)makeTableViewPlain:(void (^)(UITableView *))block;//  
    
    + (UITableView *)makeTableViewGroup:(void (^)(UITableView *))block;
    
    - (UITableView *(^)(CGRect rect))mFrame;//  frame
    
    - (UITableView *(^)(CGFloat rowHeight))mRowHeight;//  
    
    - (UITableView *(^)(UIColor * bgColor))mBgColor;//   
    
    - (UITableView *(^)(BOOL showVerticalScrollIndicator))mShowVertical;//         
    
    - (UITableView *(^)(BOOL showHorizontalScrollIndicator))mShowHorizontal;//         
    
    - (UITableView *(^)(UITableViewCellSeparatorStyle separatorStyle))mSeparatorStyle;//cell    
    
    - (UITableView *(^)(Class className, NSString *identifier))mTableViewCellClass;//cell class   
    
    - (UITableView *(^)(id delegate, id dataSource))mDelegate;//    
    @end
    
  • .m 파일
  • @implementation UITableView (ChainStyle)
    
    + (UITableView *)makeTableViewPlain:(void (^)(UITableView *))block {
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
        block(tableView);
        return tableView;
    }
    + (UITableView *)makeTableViewGroup:(void (^)(UITableView *))block {
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
        block(tableView);
        return tableView;
    }
    - (UITableView *(^)(CGRect))mFrame {
        return ^id(CGRect rect) {
            self.frame = rect;
            return self;
        };
    }
    - (UITableView *(^)(CGFloat))mRowHeight {
        return ^id(CGFloat rowHeight) {
            self.rowHeight = rowHeight;
            return self;
        };
    }
    
    - (UITableView *(^)(UIColor *))mBgColor {
        return ^id(UIColor * bgColor) {
            self.backgroundColor = bgColor;
            return self;
        };
    }
    
    - (UITableView *(^)(BOOL))mShowVertical {
        return ^id(BOOL showVerticalScrollIndicator) {
            self.showsVerticalScrollIndicator = showVerticalScrollIndicator;
            return self;
        };
    }
    
    - (UITableView *(^)(BOOL))mShowHorizontal {
        return ^id(BOOL showHorizontalScrollIndicator) {
            self.showsHorizontalScrollIndicator = showHorizontalScrollIndicator;
            return self;
        };
    }
    
    - (UITableView *(^)(UITableViewCellSeparatorStyle))mSeparatorStyle {
        return ^id(UITableViewCellSeparatorStyle separatorStyle) {
            self.separatorStyle = separatorStyle;
            return self;
        };
    }
    
    -(UITableView *(^)(__unsafe_unretained Class, NSString *))mTableViewCellClass {
        return ^id(Class className, NSString *identifier) {
            [self registerClass:className forCellReuseIdentifier:identifier];
            return self;
        };
    }
    - (UITableView *(^)(id, id))mDelegate {
        return ^id(id delegate ,id dataSource) {
            self.delegate = delegate;
            self.dataSource = dataSource;
            return self;
        };
    }
    @end
    

    응용 프로그램
  • 필요한 파일에서 방금 만든 클래스 이름을 인용
  • #import "UITableView+ChainStyle.h"
    
  • 및 생성
  • - (void)makeTableView {
        if (_tableView == nil) {
            [UITableView makeTableViewPlain:^(UITableView *tableView) {
                _tableView = tableView;
                tableView.mFrame(CGRectMake(0, 0, Screen_width, Screen_height - 64)).mRowHeight(40).mShowVertical(YES).mShowHorizontal(NO).mBgColor([UIColor whiteColor]).mSeparatorStyle(UITableViewCellSeparatorStyleNone).mTableViewCellClass([UITableViewCell class], @"Animation").mDelegate(self, self).addView(self.view);
            }];
        }
    }
    
  • viewDidLoad 중
  • [self makeTableView];
    

    코드는 위와 같이 button, label 등 공간을 똑같이 봉인할 수 있으며 향후 프로젝트에서 사용될 수 있다(tableView의 스타일 설정에서 UItable View Style은readonly이기 때문에 스타일의 체인 개발을 실현하지 못했기 때문에 신이 수정 방법을 제시할 수 있기를 바란다)

    끝맺다

    좋은 웹페이지 즐겨찾기