논리적이고 명확한 카트 모델

3598 단어 objective-c카트
GitHub: https://github.com/lll1024/JVShopcart

효과도


설명


일반적인 기능과 개조가 용이한 카트 모델로서 총 5개의 모듈이 포함되어 있습니다.
  • JVShopcartViewController: 쇼핑 카트 컨트롤러는 모델과View를 조율하는 데 100여 줄 코드만 있다
  • JVShopcartFormat: 네트워크 요청 및 논리 처리 담당
  • JVShopcartTableViewProxy: 컨트롤러의 TableView 에이전트로
  • View: 셀, HeaderView, CountView(상품 수를 바꾸는 보기), BottomView(컨트롤러 밑에 결제 버튼이 포함된 보기)
  • 포함
  • Model: BrandModel과 ProductModel 두 층 포함
  • 사용


    먼저 프로젝트 안에 있는 JVShopcart 폴더를 프로젝트에 끌어다 놓으면 소스 라이브러리 Vendor 폴더가 필요에 따라 처리됩니다. 모델은 반드시 바뀌지만 카트의 모델은 대동소이하고 다른 것은 크게 바뀌지 않습니다.JVShopcartViewController에 관해서는 JVShopcartFormatDelegate 프로토콜을 따르기 때문에 프로토콜의 방법은 모두 @required로 수식된 것이기 때문에 반드시 실현해야 한다.이러한 방법은 다음과 같습니다.
    - (void)shopcartFormatRequestProductListDidSuccessWithArray:(NSMutableArray *)dataArray;
    - (void)shopcartFormatAccountForTotalPrice:(float)totalPrice
                                    totalCount:(NSInteger)totalCount
                                 isAllSelected:(BOOL)isAllSelected;
    - (void)shopcartFormatSettleForSelectedProducts:(NSArray *)selectedProducts;
    - (void)shopcartFormatHasDeleteAllProducts;
  • 이것은 카트 목록이 성공한 후에 리셋을 요청하는 방법으로 모델이 장착된 그룹을 컨트롤러로 리셋한다.컨트롤러가 TableView의 프록시 클래스JVShopcartTableViewProxy에 이를 부여하고 TableView를 새로 고칩니다.
  • 이것은 사용자가 단일 선택, 다중 선택, 전체 선택, 삭제를 조작하면 밑에 있는 결제 보기 안의 전체 선택 단추 상태, 상품 총 가격과 상품 수를 통일적으로 리셋하는 방법이다. 이 API는 사용자가 조작한 결과이다. 즉, 전체 선택 여부, 상품 총 가격과 상품 총 수량 리셋JVShopcartViewController이다. 컨트롤러가 이 데이터를 가지고 밑에 있는 결제 보기 BottomView의 configure 방법을 사용하고 TableView를 리셋한다.UI 업데이트가 완료되었습니다.
  • 이것은 사용자가 결제 단추를 누르면 리셋 방법입니다. 이 API는 ProductModel을 선택하지 않은 모델 그룹 리셋JVShopcartViewController을 제거하지만 원본 데이터 원본을 바꾸지 않습니다. 사용자가 언제든지 리셋할 수 있기 때문입니다.
  • 이것은 사용자가 카트의 모든 데이터를 삭제한 후에 리셋하는 방법입니다. 보기의 숨김이나 알림을 할 수 있습니다.
  • JVShopcartFormat에 관하여 이 유형은 주로 네트워크 요청과 논리 처리, 그리고 결과의 리셋을 책임진다.이러한 방법은 다음과 같습니다.
    - (void)requestShopcartProductList;
    - (void)selectProductAtIndexPath:(NSIndexPath *)indexPath isSelected:(BOOL)isSelected;
    - (void)selectBrandAtSection:(NSInteger)section isSelected:(BOOL)isSelected;
    - (void)changeCountAtIndexPath:(NSIndexPath *)indexPath count:(NSInteger)count;
    - (void)deleteProductAtIndexPath:(NSIndexPath *)indexPath;
    - (void)starProductAtIndexPath:(NSIndexPath *)indexPath;
    - (void)selectAllProductWithStatus:(BOOL)isSelected;
    - (void)settleSelectedProducts;
  • 이것은 쇼핑 카트 데이터 원본을 요청하는 방법으로 모두AFNetworking에 대해 2차 봉인을 해서 데이터를 요청한다.
  • 이것은 사용자가 특정한 제품이나 어떤row의 처리 방법을 선택한 것이다. 이것은 밑부분의 결제 보기를 바꾸기 때문에 반드시 상기 협의의 두 번째 방법으로 되돌려보낼 것이다. 아래와 같다.
  • 이것은 사용자가 어떤 브랜드나 section을 선택한 처리 방법
  • 이다.
  • 이것은 사용자가 상품 수량을 바꾸는 처리 방법
  • 이다.
  • 사용자 삭제 작업 처리 방법
  • 이것은 사용자 수집 조작의 처리 방법으로 여기에는 리셋 방법이 없고 수요에 따라 리셋 방법을 추가할 수 있다.
  • 사용자가 모두 선택한 조작의 처리 방법
  • 사용자 결제 작업 처리 방법
  • 몇 가지 주의가 필요합니다.

  • 브랜디 모델에는 두 개의 멤버 변수가 수동으로 추가되었다. isSelected와 selected Array 전자는 어떤 브랜드를 기록하거나 어떤 섹션이 선택되었는지 여부를 기록하기 위한 것이고 후자는 결제할 때 선택한 상품을 기록하기 위한 것이다
  • Product Model에 있는 isSelected도 수동으로 추가한 것도 어떤 상품을 기록하거나 어떤 row가 선택되었는지 기록하기 위한 것이다
  • Vendor 폴더 안에는 일부 소스 라이브러리 레이아웃이 Masonry 사전 회전 모델에 의존하고 MJextension 그림에 의존하며 비동기적으로 불러오기SDWebImage 키보드에 의존하는 관리 의존 IQKeyboard Manager. 물론 너도 스스로 처리할 수 있다
  • View 안의 리셋은 모두 Block JVShopcartFormat 안의 리셋은 모두 사용하는delegate 너도 수요에 따라 구체적인 리셋 방식을 선택할 수 있다
  • 쇼핑 카트는 대동소이하지만 항상 이상한 수요가 있기 때문에 스스로 처리해야 한다. 분명히 내 주석에 따라 수정해야 한다
  • 이상 도움이 된다면 스타를 환영합니다.

    좋은 웹페이지 즐겨찾기