IOS博客项目搭建-13-发微博弹窗

iOS开发

在做发布作品的数据框时,需要自定义一个TextView,因为自带的不能满足需求:

 UITextField : 不能换行

 UITextView :没有提示文字

IWComposeViewController.m 发微博

      
//
//  IWComposeViewController.m
//  ItcastWeibo
//
//  Created by apple on 14-5-19.
//  Copyright (c) 2014年 itcast. All rights reserved.
//
/**
 UITextField : 不能换行
 UITextView :没有提示文字
 */

#import "IWComposeViewController.h"
#import "IWTextView.h"

@interface IWComposeViewController ()
@property (nonatomic, weak) IWTextView *textView;
@end

@implementation IWComposeViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 设置导航栏属性
    [self setupNavBar];
    
    // 添加textView
    [self setupTextView];
}

/**
 *  添加textView
 */
- (void)setupTextView
{
    // 1.添加
    IWTextView *textView = [[IWTextView alloc] init];
    textView.font = [UIFont systemFontOfSize:15];
    textView.frame = self.view.bounds;
    [self.view addSubview:textView];
    
    // 让textView成为第一响应者,弹出键盘
    [textView becomeFirstResponder];
    self.textView = textView;
    
    // 2.监听textView文字改变的通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:textView];
}

/**
 *  监听文字改变
 */
- (void)textDidChange  
{
    self.navigationItem.rightBarButtonItem.enabled = (self.textView.text.length != 0);
//    self.navigationItem.rightBarButtonItem.enabled = self.textView.text.length;
}

/**
 *  设置导航栏属性
 */
- (void)setupNavBar
{
    self.view.backgroundColor = [UIColor whiteColor];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(cancel)];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"发送" style:UIBarButtonItemStyleDone target:self action:@selector(send)];
    self.navigationItem.rightBarButtonItem.enabled = NO;
    self.title = @"发微博";
}

/**
 *  取消
 */
- (void)cancel
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

/**
 *  发微博
 */
- (void)send
{
    
}

@end

 

 2. 在IWAppDelegate.m代理中监听内存警告,并清除缓存的图片:

          
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    // 停止下载所有图片
    [[SDWebImageManager sharedManager] cancelAll];
    
    // 清除内存中的图片 SDWebImageManager会做内存缓存和硬盘缓存
    [[SDWebImageManager sharedManager].imageCache clearMemory];
    
}


3、编辑文本框,当用户进入到发微博页面时,需要弹出键盘,而不是需要用户点击才出现键盘。

IOS博客项目搭建-13-发微博弹窗_第1张图片

       
/**
 *  添加textView
 */
- (void)setupTextView
{
    // 1.添加
    IWTextView *textView = [[IWTextView alloc] init];
    textView.font = [UIFont systemFontOfSize:15];
    textView.frame = self.view.bounds;
    [self.view addSubview:textView];
    
    // *********让textView成为第一响应者,弹出键盘********
    [textView becomeFirstResponder];
    self.textView = textView;
    
    // 2.监听textView文字改变的通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:textView];
}

IOS博客项目搭建-13-发微博弹窗_第2张图片


我们可以看到,在点击+号进入发布微博界面,有一些稍微的卡顿,这是因为view未全部加载完而弹出键盘,为了用户体验,这里这样做:等textView加载完后,在弹出键盘。

    
//  等textview加载完毕后,让textView成为第一响应者,弹出键盘
-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.textView becomeFirstResponder];
}

效果展示:

控制器加载完后,键盘才弹出:

IOS博客项目搭建-13-发微博弹窗_第3张图片


好的,接下来查询新浪微博的开放接口文档http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI

找到发微博的接口:

IOS博客项目搭建-13-发微博弹窗_第4张图片


发布一条新微博  https://api.weibo.com/2/statuses/update.json

  在发布微博的控制器IWComposeViewController.m实现发微博功能:

#import "IWComposeViewController.h"
#import "IWTextView.h"
#import "AFNetworking.h"        // 新增
#import "IWAccount.h"           // 新增
#import "IWAccountTool.h"        // 新增
#import "MBProgressHUD+MJ.h"     // 新增

/**
 *  发微博
 */
- (void)send
{
    // AFNetworking\AFN
    // 1.创建请求管理对象
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    
    // 2.封装请求参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    
    // 发送内容
    params[@"status"] = self.textView.text;
    
    // 根据之前封装的账号工具类IWAccountTool,登陆授权的账号信息被保存在本地,然后通过账号属性获取access_token
    params[@"access_token"] = [IWAccountTool account].access_token;
  
    
    // 3.发送请求
    [mgr POST:@"https://api.weibo.com/2/statuses/update.json" parameters:params
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          [MBProgressHUD showSuccess:@"恭喜,发送成功"];
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          // 隐藏提醒框
          [MBProgressHUD showError:@"抱歉,发送失败"];
      }];
    
    // 4.关闭控制器。当用户点击发送微博按钮后,需要将发微博界面关掉,因为发微博有时可能需要很长时间
    [self dismissViewControllerAnimated:YES completion:nil];
    
    
}

IOS博客项目搭建-13-发微博弹窗_第5张图片


OK,到目前为止,发送文字的微博功能,完美实现 ^_^




你可能感兴趣的:(ios,发布作品)